我正在学习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])
答案 0 :(得分: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))
答案 1 :(得分:1)
您可能希望将列表和文件压缩在一起:
for should_output, line in zip(array, f):
if should_output:
f2.write(line)
zip
适用于任意数量的iterables并将相应的元素组合成一个可迭代的元组,例如:
>>> 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]
中所做的那样)。幸运的是,您将所有行都读入列表data
。如果您希望坚持使用与当前方法更相似的方法,则只需将f[i]
替换为data[i]
。