Проблема заключается в том, как вы читаете текст из одного файла CSV, определяете определенное ключевое слово в файле, читаете строки с ключевым словом и записываете эти строки в другой файл. Хотя логически эта проблема кажется простой, синтаксически она оказалась сложной.

Код ниже - это код, который я пробовал. Интересно, что строка print (row) способна напечатать именно ту информацию, которую я пытаюсь записать во второй файл CSV. Однако мне не удалось выполнить ту же задачу с помощью модуля записи CSV (https: / /docs.python.org/3.3/library/csv.html ) .

import csv

csvfile = open('read_file.csv', 'r')
read = csv.reader(csvfile)
for row in csvfile:
    if str('key_word') in row:
        #print(row)
        with open('write_file.csv', "w") as csv_file:
            writer = csv.writer(csv_file, delimiter=',')
            writer.writerow(row)

Код работает успешно. Тем не менее, результат выглядит случайным и неорганизованным. По сути, возникают проблемы с итерацией по CSV-файлу и последовательной записью строк.

0
BSH180_44 4 Июл 2019 в 22:27

3 ответа

Лучший ответ

Откройте оба файла в разных файлах перед повторением. Не открывайте целевой файл каждую итерацию цикла. Также не используйте for row in csvfile, используйте for row in reader

import csv

csvfile = open('read_file.csv', 'r')
reader = csv.reader(csvfile)

with open('write_file.csv', "w+") as csv_file1: # different variable
    writer = csv.writer(csv_file1, delimiter=',')

    for row in reader:
        if str('key_word') in row:
            # print(row)
            writer.writerow(row)
3
fizzybear 4 Июл 2019 в 19:43

Вот ответ:

with open('read_file.csv', 'r') as csv_file:
    csv_reader = csv.reader(csv_file)

#skip first line
#next(csv_reader)

with open ('write_file.csv', 'w') as new_file:
    csv_writer = csv.writer(new_file, delimiter=',')

    for line in csv_reader:
        if str('keyword') in line:
        #print(line[2])
            csv_writer.writerow(line)
0
BSH180_44 4 Июл 2019 в 20:21

Вам вообще не нужно использовать модуль csv

csvfile = open('read_file.csv', 'r')
with open('write_file.csv', 'w+') as csv_file2:
    for row in csvfile:
        if str('key_word') in row:
            csv_file2.write(row)
1
Ricky Kim 4 Июл 2019 в 19:48