用其他值替换文件中的一列

时间:2016-04-25 02:22:11

标签: python file

我有一个这样的文件:

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个位置,剩下的就剩下了。有人可以提出解决方案吗?

2 个答案:

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