【发布时间】:2019-09-02 15:51:47
【问题描述】:
我有两个大的 .csv 文件,我想使用csv DictReader 或什至pandas 逐行比较两列。
我需要检查两个文件中特定列的所有行是否相同。我在这里看到了一些建议,但没有一个适合我的情况。问题是第二个打开文件的迭代顺序不正确,即使文件相同。
我已经用openpyxl 快速完成了搜索和修改任务,但由于 csv 文件大小为数百 MB,即使在运行时将 csv 转换为 excel 似乎也不是一个好的决定。
这是我现在的代码:
import csv
class CsvCompareTester:
work_csv_path = None
test_csv_path = None
@staticmethod
def insert_file_paths():
print()
print('Enter the full absolute path of the WORK .csv file:')
CsvCompareTester.work_csv_path = input()
print('Enter the full absolute path of the TEST .csv file:')
CsvCompareTester.test_csv_path = input()
@staticmethod
def compare_files(work_csv_file, test_csv_file):
work_csv_obj = csv.DictReader(work_csv_file, delimiter=";")
test_csv_obj = csv.DictReader(test_csv_file, delimiter=";")
for work_row in work_csv_obj:
for test_row in test_csv_obj:
if work_row == test_row:
print('ALL CLEAR')
print(str(work_row))
print(str(test_row))
print()
else:
print("STRINGS DON'T MATCH")
print(str(work_row))
print(str(test_row))
print()
if __name__ == "__main__":
csv_tester = CsvCompareTester()
csv_tester.insert_file_paths()
with open(CsvCompareTester.work_csv_path) as work_file:
with open(CsvCompareTester.test_csv_path) as test_file:
csv_tester.compare_files(work_file, test_file)
我如何迭代 .csv 文件的行,同时还能够通过键或值来处理特定的行和列(这肯定可以减少无用迭代的数量)。 出于某种原因,在上面的代码中,第一个文件中的每个行字符串都不匹配第二个文件中的另一个。文件是相同的并且具有相同的条目顺序,我已经仔细检查过。 为什么第二个文件没有像第一个一样从头到尾迭代?
【问题讨论】: