我有一个这样的文件:
1 0
1 0
1 0
2 0
2 0
2 0
3 0
3 0
3 0
3 0
3 0
4 0
5 0
和另一个文件file2
,其中包含一列:
0.122
0.133
0.855
-2.1
-9.00
我想用file2
中的数据替换文件一的第二列,以便输出文件变为:
1 0.122
1 0.122
1 0.122
2 0.133
2 0.133
2 0.133
3 0.855
3 0.855
3 0.855
3 0.855
3 0.855
4 -2.1
5 -9
换句话说,我想将第二个文件中的数据复制到第一个,直到第一个列值保持不变。当第一列中的值发生更改时,它会从另一个文件中选择第二个值。
我一直在python中尝试它,并且能够替换列但不能满足重复次数所需的次数。我的代码只是将数据复制到第一个文件中column2的前5个位置,剩下的就剩下了。有人可以提出解决方案吗?
答案 0 :(得分:0)
您可以将file2
的数据读入枚举行的dict
。然后阅读file1
的行并写入第三个文件file3
,以保持原始文件不变。
with open('file2.txt') as file2:
file2_data = dict(enumerate(file2.readlines(), 1))
with open('file1.txt') as file1:
file1_data = file1.readlines()
with open('file3.txt', 'w') as file3:
for line in file1_data:
line_no = int(line.split()[0])
file3.write('{} {}'.format(line_no, file2_data[line_no]))
现在file3
将包含以下内容:
1 0.122
1 0.122
1 0.122
2 0.133
2 0.133
2 0.133
3 0.855
3 0.855
3 0.855
3 0.855
3 0.855
4 -2.1
5 -9.00
还有fileinput
模块,下面的代码也会创建与上面相同的输出:
import fileinput
with open('data2.txt') as f2:
f2_raw = [i.strip('\n') for i in f2.readlines()]
f2 = dict(enumerate(f2_raw, 1))
for line in fileinput.input('data1.txt', inplace=True, backup='.bak'):
line_no = int(line.split()[0])
print(line_no, f2[line_no])
答案 1 :(得分:0)
最好看看你的代码,但这可能会帮助你调整你的逻辑(它不会写入原始文件,它假定第二个文件有足够的行):
f1 = open('file1.txt', 'r')
f2 = open('file2.txt', 'r')
oldF1Value = None
v = None
for l1 in f1:
[c1, c2] = l1.split()
if (oldF1Value != c1):
oldF1Value = c1
v = f2.readline().splitlines()[0]
print(c1, v)
f1.close()
f2.close()