2013-04-05 100 views
0

你好我有一个由N行96个值组成的文本文件 我预计它是有组织的N * 96但不是 实际上行数是双数第一行是50秒46等等阅读txt文件字段后

我写了一个代码,重新编写原始行与其他2行读取行 ,但我问是否有一种方法,而不是连续读取每个字段。 每个值用空格caractere分隔。

for j in range (239) : 
    L=[] 
    lc1 = f.readline().split() 
    lc2 = f.readline().split() 

    for i in range(50) : 
     L.append(lc1[i]) 

    for i in range(46) : 
     L.append(lc2[i]) 

    table[j][:]=L 

f.close() 

问候

+0

看看标准库中可爱的'csv'模块。 2.7:http://docs.python.org/2/library/csv.html 3.3:http://docs.python.org/3.3/library/csv.html – bernie 2013-04-05 15:41:15

回答

0

嗯......阅读更有意义的代码比读你的描述,对于分割线的一部分。 :)

鉴于您的文本的输入结构是已知的。即,每行96个字,你可以做,而不是执行以下操作:

ValuesPerLine=96 
ResultsTable=[] 
TableIndex=0 
NewLine=[] 

for line in f: 
    for value in line.split(): 
     NewLine.append(value) 
     if len(NewLine) == ValuesPerLine: 
      ResultsTable[TableIndex][:]=NewLine 
      NewLine=[] 
      TableIndex=TableIndex+1 

这样,即使线后分流不同,只要期望是,你必须每行96个值在结果,这将从您的来源生成。

“for line in f:”的好处是它可以像“readlines()”和“readline()”一样有效地处理它,所以你可以获得一些性能改进。

编辑:

根据您打开的文件类型,它可能有助于去掉从文件中读取行的任何“\ n”来避免,具有一个值,每一个现在,然后,嵌入“\ n”。

0

我不知道如果我理解你的问题,但这里是收集你的两个环插入一个语句的方式:

for j in range (239) : 
    lc1 = f.readline().split() 
    lc2 = f.readline().split() 

    L = lc1[:50] + lc2[:46] 

    table[j][:]=L 

f.close() 

我不禁想通过回收@乔恩提出的好的技巧在Copy the last three lines of a text file in python?

q = collections.deque(2) # define max size of deque 
table = [] 
with open("test.txt") as f: 
    for line in f : 
     q.append(line) 
     if len(q) != 2 or len(q[0]) != 50 : 
      continue 
     table.append(q[0] + q[1]) 

作品-clements与Python 2.7或更高

0

假设该文件可以很容易地加载到内存中,我会做这样的事情:

all_fields = f.read().split(): 
for i in range(0, len(all_fields), 96): 
    fields = all_fields[i:i+96] 
    # process fields