我有两个股票列表(新的和旧的)。我如何比较它,看看哪些项目已经添加,哪些已经删除(高兴地将它们添加到两个不同的文件中添加和删除)?
到目前为止,我已经疲惫不堪,一排排地往前看。
import csv
new = "new.csv"
old = "old.csv"
add_file = "add.csv"
remove_file = "remove.csv"
with open(new,encoding="utf8") as new_read, open(old,encoding="utf8") as old_read:
new_reader = csv.DictReader(new_read)
old_reader = csv.DictReader(old_read)
for new_row in new_reader :
for old_row in old_reader:
if old_row["STOCK CODE"] == new_row["STOCK CODE"]:
print("found")这适用于一个项目。如果我添加了一个* its:*它就会一直打印到找到为止。所以这不是比较文件的准确方法。
我有价值5k的行。
必须有更好的方法将差异添加到两个不同的文件中,同时保持相同的数据结构?
注:我已经厌倦了这个链接Python : Compare two csv files and print out differences 2的一些小问题: 1.数据结构没有保存;2.没有参考位置的变化
发布于 2020-01-09 11:43:20
您只需将数据读入内存,然后进行比较。为了更快地查找,我在本例中使用了代码集。
import csv
def get_csv_data(file_name):
data = []
codes = set()
with open(file_name, encoding="utf8") as csv_file:
reader = csv.DictReader(csv_file)
for row in reader:
data.append(row)
codes.add(row['STOCK CODE'])
return data, codes
def write_csv(file_name, data, codes):
with open(file_name, 'w', encoding="utf8", newline='') as csv_file:
headers = list(data[0].keys())
writer = csv.DictWriter(csv_file, fieldnames=headers)
writer.writeheader()
for row in data:
if row['STOCK CODE'] not in codes:
writer.writerow(row)
new_data, new_codes = get_csv_data('new.csv')
old_data, old_codes = get_csv_data('old.csv')
write_csv('add.csv', new_data, old_codes)
write_csv('remove.csv', old_data, new_codes)https://stackoverflow.com/questions/59662442
复制相似问题