readlines от итерации через массив и записи в новый файл - PullRequest
0 голосов
/ 05 декабря 2018

bad_list - это массив, который возвращается из другой функции и возвращает номера строк строк, которые являются проблематичными и требуют более детального рассмотрения

например, array([ 1, 3, 4, 27, 50, 99], dtype=int64)


Идея состоит в том, чтобы прочитать test.txt и создать новый test_badlines.txt, который содержит только проблемные строки, как указано в bad_list


Вот то, что у меня есть, строка печати работает, ноWritelines только выплевывает 1 строку, когда это должно быть 6 строк

for rows in bad_list:
    filename = 'C:\\Users\\Username\\Downloads\\test.txt'
    bad_filename = str(filename)[:-4] + '_badlines.txt'
    with open(filename) as f,  open(bad_filename, 'w') as wt: 
        lines = f.readlines()
        #print lines[rows]
        wt.writelines(lines[rows])

1 Ответ

0 голосов
/ 05 декабря 2018

lines - это обычное list, а простые list s не могут быть проиндексированы последовательностью индексов для поиска.Самым простым решением здесь является создание выражения-генератора, которое вытягивает интересующие вас строки, заменяя:

wt.writelines(lines[rows])

на:

wt.writelines(lines[row] for row in bad_list)

Предполагая, что bad_list - это массиввы описали, вы полностью отбрасываете внешнюю петлю for;Вы не хотите открывать входные и выходные файлы снова и снова по одному разу в строке, всего один раз.

...