Сопоставление данных файла CSV с данными текстового файла - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь создать инструмент, который считывает данные из файла txt и файла csv и находит, где идентификаторы в текстовом файле совпадают с идентификаторами в файле csv. Затем он запишет результаты в файл csv. Исходный файл csv будет иметь имена столбцов, хотя предполагается, что расположение столбцов может варьироваться от файла к файлу. Таким образом, функция соответствия не будет жестко закодирована на основе расположения столбцов. Вот код очень низкого уровня, который я написал, но он не совсем работает. Надеюсь, что кто-нибудь сможет направить меня в правильном направлении.

import csv

with open("test_file1.txt", "r") as file1:

    with open("test_file2.csv", "r") as file2:
        with open("results_file.csv", "w", newline= "") as csv_file:

            csv_writer = csv.writer(csv_file, delimiter= ",", quotechar= '"', quoting= csv.QUOTE_MINIMAL)
            for line1 in file1:
                for line2 in file2:
                    if line1==line2:
                        csv_writer.writerow(line1, line2)

Файл csv создан, но в нем ничего нет. Не знаю почему.

1 Ответ

0 голосов
/ 27 мая 2020

Выполнение приведенного выше кода приводит к подъему TypeError. csv_writer поддерживает только один аргумент ( docs )

Вместо этого вы можете написать:

csv_writer.writerow((line1, line2))

Но главная проблема в том, что ваш for l oop завершает итерацию file2 в первом l oop первой строки в file1, предполагая, что logi c, который вы написали, является тем, что вы хотите, вам, скорее всего, нужно будет сделать:

with open("results_file.csv", "w", newline="") as csv_file:
    csv_writer = csv.writer(csv_file, delimiter=",", quotechar='"', quoting=csv.QUOTE_MINIMAL)

with open("test_file1.txt", "r") as file1:
    for line1 in file1:
        with open("test_file2.csv", "r") as file2:
            for line2 in file2:
                _line1 = line1.replace("\n", "")
                _line2 = line2.replace("\n", "")
                csv_writer.writerow((_line1, _line2))
...