我有两个大的文本文件的数据从一个实验,我想把它分成一个,以特殊的方式。
小样本数据:
file1:
plotA 10
plotB 9
plotC 9file2:
98%
7/10
21
98%
5/10
20
98%
10/10
21我希望得到这样的结果:
plotA 10 98% 7/10 21
plotB 9 98% 5/10 20
plotC 9 98% 10/10 21我不知道它是如何在python中解决的。我尝试用以下方式重新订购file2:
lines = file2.readlines()
aaa = lines[0] + lines[3] + lines[6]
bbb = lines[1] + lines[4] + lines[7]
ccc = lines[2] + lines[5] + lines[8]并使用zip,但我失败了(这个方法对于大型文本文件来说很费时)。
有什么帮助吗?
发布于 2015-08-26 19:18:56
您可以使用itertools.izip_longest将文件2切片为三行,并再次使用它将它们与第一个文件一起压缩:
from itertools import izip_longest
with open('file1.txt') as f1, open('file2.txt') as f2:
args = [iter(f2)] * 3
z = izip_longest(f1, izip_longest(*args), fillvalue='-')
for line, tup in z:
print '{:11}'.format(line.strip()), '{:5}{:5}{:>5}'.format(*map(str.strip, tup))如果您想要将这个结果写入一个新文件,您可以打开一个用于写的文件,而不是打印它,将行写在文件中。
结果:
plotA 10 98% 7/10 21
plotB 9 98% 5/10 20
plotC 9 98% 10/10 21发布于 2015-08-26 19:19:04
下面是一个示例,您必须通过错误处理和所有操作来改进它:
file1 = open('file1')
file2 = open('file2')
# take one line in file1
for line in file1:
# print result with tabulation to separate fields
print '\t'.join(
# the line from file1
[line.strip()] +
# and three lines from file2
[file2.readline().strip() for _ in '123']
) 请注意,我使用字符串'123'是因为它比range(3)短(而且它不需要函数调用);它只需具有任何类型的可迭代性,生成三个步骤。
只读取所需的数据并处理它们,避免了在内存中加载所有文件的需要(正如您所说的,您的文件很大)。
干杯。
https://stackoverflow.com/questions/32234727
复制相似问题