2013-02-25 87 views
1

我目前正在研究一个在'|'上分割平面文件的程序,符号并将每个实体分隔成代码中定义的新对象。它看起来像这样:需要多个值才能解压

results = 0 
    searchphrase = input("Search: ") 
    with open('file.dat', 'r', encoding='utf8') as info_1: 
     for line in info_1: 
      a, b, c, d, e, f, g, h, i, j, k, l, m = line.split('|') 
      if searchphrase in a: 
       results +=1 
       print(results, a + '|' + b + '|' + c etc.) 

编辑1

这是不工作,给我的错误消息need more than 1 value to unpack,解析为a, b, c, d, e, f, g, h, i, j, k, l, m = line.split('|')行程序的版本。

从我呼吁该文件的数据的格式如下:

a|b|c|d|e|f|g|h|i|j|k|l|m 

是否有一个原因,它会解释,作为一个单一的线和各实体不会蔓延到自己的对象吗?该程序运行正常,当我这样做是这样的:

results = 0 
searchphrase = input("Search: ") 
with open('file.ext', 'r', encoding='utf8') as info_1: 
    for line in info_1: 
     a = line.split('|') 
     if searchphrase in a: 
      results +=1 
      print(results, a) 

但我希望人们能够根据文件中的特定列搜索信息(即搜索关于x,y的搜索d等。 )。我会怎么做呢?

+1

旁白:有一个专门设计了这样的任务,以帮助您有一个标准库模块:HTTP://文档.python.org/3.1/library/csv.html – bernie 2013-02-25 19:00:49

+1

另外:不可能像'a,b,c,d,e,f,g,h,i,j,k,l,m = something是你做任何事情的最佳方式。不是不可能的,但不太可能。使用字典或通过将列索引到列表或元组或这些的组合中,您会更好。 – DSM 2013-02-25 21:30:04

回答

4

您可能在您的输入中有空行。跳过这些:

for line in info_1: 
    if not line.strip(): continue 

,但你可能想使用csv module代替:

import csv 

for row in csv.reader(open('file.dat', newlines=''), delimiter='|'): 
+0

所以对于csv模块,这将如何改变代码的结构?我是否还需要指定a,b,c,d,e,f = line.split('|')? – 2013-02-25 19:10:43

+0

@ErikG .:如果*有*,你可以使用'a,b,c,d,e,f,g,h,i,j,k,l,m = row'。 – 2013-02-25 19:45:58

相关问题