проблемы при сравнении сходства в трех файлах CSV с использованием Python - PullRequest
0 голосов
/ 26 апреля 2018

Это мой второй вопрос. У меня есть три очень больших файла CSV с одинаковым количеством столбцов, но разным количеством строк в каждом файле. Некоторые строки во всех трех файлах похожи. Я должен получить эти похожие строки из всех трех файлов и поместить их в новый CSV-файл. Пример файла CSV ниже:

  ID                   Date                           Text
234212       'Thu Jun 23 04:16:27 +0000 2013'        Any Text
234213       'Thu Jun 23 04:16:28 +0000 2013'        Any Text
234214       'Thu Jun 23 04:16:29 +0000 2013'        Any Text
         .......and so on

Идентификаторы, которые являются уникальными во всех трех файлах, имеют схожий текст, поэтому мы можем фильтровать данные либо по столбцу идентификаторов, либо по строкам, поскольку они имеют сходные данные с одинаковыми идентификаторами. Код для поиска похожих строк во всех трех файлах приведен ниже:

import csv

csvInputFile1=open('inputFile1.csv', 'r', encoding="utf-8", newline='') 
csvInputFile2=open('inputFile2.csv', 'r', encoding="utf-8", newline='')
csvInputFile3=open('inputFile3.csv', 'r', encoding="utf-8", newline='') 

csvOutputFile=open('outputSimilarData.csv', 'w', encoding="utf-8", newline='') 

csvReader1 = csv.reader(csvInputFile1)
csvReader2 = csv.reader(csvInputFile2)
csvReader3 = csv.reader(csvInputFile3)
#next(csvReader3)
csvWriter = csv.writer(csvOutputFile)


for row1 in csvReader1:
    row2 = next(csvReader2)
    row3 = next(csvReader3)
    #print(row2)
    #print(row3[0])
    if row1 != row2 and row1 != row3:
    #if row1 not in row and row1 not in row3:
        print(row1)
        csvWriter.writerow(row1)
        #continue


csvOutputFile.close()
csvInputFile3.close()
csvInputFile2.close()
csvInputFile1.close()

Я использую файл 1 в качестве первого входного файла, потому что он имеет самый низкий номер. строк и аналогично файл 2 имеет более высокий номер. из строк, чем файл 1 и файл № 3 является самым большим. Поэтому я перебираю файл 1 и сравниваю идентификаторы с двумя другими файлами, и если идентификатор есть, он должен распечатать его и записать в новый файл CSV.
Как мы видим, я использую «не равно» или «не в» в коде, и он прекрасно работает и печатает все строки из файла 1, которых нет в файле 2 и файле 3 (уникальные идентификаторы в файле 1) ,

Проблема в том, что, когда я нахожу «==» или «в» для нахождения похожих идентификаторов, код не работает и ничего не печатает, а также ничего не появляется в новом файле CSV.

Я не могу решить это и действительно ценю, если кто-то может мне помочь; Спасибо ...

1 Ответ

0 голосов
/ 26 апреля 2018

Я рекомендую difflib для этого, поставляется с Python.

Есть много примеров, например,

https://www.smallsurething.com/comparing-files-in-python-using-difflib/

python difflib, сравнивающий файлы

...