Я разрабатываю скрипт, который занимает разницу между двумя файлами csv и создает новый файл csv как вывод с различиями, но только если те же 2 строки (относится к строке число) между двумя входными файлами содержат разные данные, например строка 3 имеет «mike», «баскетболист» в файле 1, а в строке 3 в файле 2 есть «mike», «бейсболист». Выходные данные csv хватали бы их печать и записывали их в csv. Он работает, но есть некоторые проблемы (я знаю, что этот вопрос также задавался несколько раз, но другие делали это по-другому для меня, и поскольку я довольно новичок в программировании, я не совсем понимаю их коды).Попытка сравнить два файла csv и записать разности в качестве вывода
Выходные данные в новом файле csv содержат каждую букву вывода в каждой ячейке (см. Рисунок ниже), и я считаю, что это что-то связано с линией ограничителя/цитаты/цитаты 37. Я хочу, чтобы они были в своих собственных ячейках без любые полные стопы, множественные пробелы, запятые или «|».
Другая проблема заключается в том, что требуется много времени для запуска. Я работаю с наборами данных до 50 000 строк, и это может занять более часа. Почему это и какой совет был бы полезен для его ускорения? Может быть, что-то вне цикла for? Я попытался использовать метод difflib ранее, но я смог распечатать весь «input_file1», но не сравнить этот файл с другим.
# aim of script is to compare csv files and output difference as a new csv
# import necessary libraries
import csv
# File1 = open(raw_input("path:"),"r") #filename, mode
# File2 = open(raw_input("path:"),"r") #filename, mode
# selects the 2 input files to be compared
input_file1 = "G:/savestuffhereqwerty/electorate_meshblocks/teststuff/Book1.csv"
input_file2 = "G:/savestuffhereqwerty/electorate_meshblocks/teststuff/Book2.csv"
# creates the blank output csv file
output_path = "G:/savestuffhereqwerty/electorate_meshblocks/outputs/output2.csv"
a = open(input_file1, "r")
output_file = open(output_path,"w")
output_file.close()
count = 0
with open(input_file1) as fp1:
for row_number1, row_value1 in enumerate(fp1):
if row_number1 == count:
print "got to 1st point"
value1 = row_value1
with open(input_file2) as fp2:
for row_number2, row_value2 in enumerate(fp2):
if row_number2 == count:
print "got to 2nd point"
value2 = row_value2
if value1 == value2:
print value1, value2
else:
print value1, value2
with open(output_path, 'wb') as f:
writer = csv.writer(f, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
# testing to see if the code writes text to the csv
writer.writerow(["test1"])
writer.writerow(["test2", "test3", "test4"])
writer.writerows([value1, value2])
print "code reached writing stage"
count += 1
print count
print "done"
# replace(",",".")
У вас есть вложенный цикл более 50000 строк. Вот откуда и начинается длительное время. Вам не нужно сравнивать каждую строку от a с каждой строкой от b! – schwobaseggl
Это потому, что у меня есть цикл for внутри цикла for? Я не знаю, как обращаться к input_file2 в первом цикле. – Crow132