在字段后读取文本文件字段

时间:2013-04-05 15:40:14

标签: python field

你好我有一个txt文件,由N行96个值组成 我预计它有组织N * 96但不是 实际上,行数是双倍,第一行是50秒46,依此类推

我写了一个代码来重新组合原始行,其他2个人一行一行地阅读 但我要问的是,有一种方法可以连续阅读每个领域。 每个值都用空格分开。

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()  

此致

3 个答案:

答案 0 :(得分: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” N”。

答案 1 :(得分:0)

我不确定我是否理解你的问题,但这是一种将你的两个循环收集到一个语句中的方法:

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

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

    table[j][:]=L   

f.close()  

我不禁试图回收@ {jon-clements在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])

使用python 2.7或更高版本

答案 2 :(得分:0)

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

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