你好我有一个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()
此致
答案 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