0

我正在学习 python,我正在尝试解决一些简单的问题以变得更好。我有两个长度相同的文件,并且我已经从第一个文件中提取了我想从第二个文件中获取的行。所以现在我有一个类似 [0, 1, 0, 0, 1, ...] 的数组,用于我想从第二个文件中读取的每一行。仅将这些行复制到第三个文件中的最佳方法是什么?这是我的代码,但我在写作行中遇到错误:

f = open('file.txt')
f2 = open('file2.txt', 'wb')
data = f.readlines()
for i in range(len(array)):
    if array[i]==1:
        f2.write(f[i])
4

2 回答 2

3

您可以使用compress从迭代器中选择元素:

from itertools import compress

l = [0, 1, 0, 1, 1, ...]     # your list
with open('second.txt') as src, open('third.txt', 'w') as dst:
    dst.writelines(compress(src, l))
于 2013-09-02T02:28:06.627 回答
1

您可能希望将列表和文件压缩在一起:

for should_output, line in zip(array, f):
    if should_output:
        f2.write(line)

zip处理任意数量的可迭代对象并将相应的元素组合成一个可迭代的元组,例如:

>>> zip([1, 2, 3], [4, 5, 6])
[(1, 4), (2, 5), (3, 6)]

您可能还需要考虑使用该with语句打开文件,例如:

with open('input.txt', 'r') as input, open('output.txt', 'w') as output:
    for should_output, line in zip(array, input):
        if should_output:
            output.write(line)

您的方法的问题是文件不可索引(正如您尝试在 中所做的那样f[i])。幸运的是,您将所有行都读入了 list data。如果您想坚持使用与当前方法更相似的方法,您可以简单地替换f[i]data[i].

于 2013-09-02T02:28:18.317 回答