2013-09-02 11 views
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]) 

ответ

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

Вы, вероятно, хотите, чтобы пронестись свой список и список файл вместе:

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

zip работает на любом количестве итерируемыми и групп соответствующих элементов вместе в Iterable кортежей, например:

>>> 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].

Смежные вопросы