【发布时间】:2020-01-08 17:58:16
【问题描述】:
我有 2 个包含已排序整数元组的 csv 文件
旧文件.csv
"(1, 2, 3)","(1, 2, 4)","(1, 3, 5)"
新文件.csv
"(1, 2, 3)","(1, 2, 4)"
我想删除这两个 csv 文件之间的 common tuples 并将输出打印为 final.csv
预期输出
"(1,3,5)"
代码尝试 A
import csv
with open('old file.csv', newline ='') as myFile_1:
reader = csv.reader(myFile_1)
list_a = list(reader)
older = [tuple(map(int, i)) for i in list_a]
with open('new file.csv', newline ='') as myFile_2:
reader = csv.reader(myFile_2)
list_b = list(reader)
newer = [tuple(map(int, i)) for i in list_b]
final_output = older.difference(newer)
csvData = [final_output]
with open('final.csv', 'w') as csvFile:
writer = csv.writer(csvFile)
writer.writerows(csvData)
csvFile.close()
错误类型
Exception has occurred: ValueError
invalid literal for int() with base 10: '(1, 2, 3)'
代码尝试 B
import csv
with open('old file.csv', newline ='') as myFile_1:
reader = csv.reader(myFile_1)
list_a = list(reader)
older = [tuple(map(str, i)) for i in list_a]
with open('new file.csv', newline ='') as myFile_2:
reader = csv.reader(myFile_2)
list_b = list(reader)
newer = [tuple(map(str, i)) for i in list_b]
final_output = older.difference(newer)
csvData = [final_output]
with open('final.csv', 'w') as csvFile:
writer = csv.writer(csvFile)
writer.writerows(csvData)
csvFile.close()
错误类型
Exception has occurred: AttributeError
'list' object has no attribute 'difference'
当我想操作 csv 文件时出现此问题,并且当 old.csv 和 new.csv 中包含的数据在运行程序时生成并存储为变量时工作得很好。这在生成较小的数据集时效果很好,但在生成大型数据集时会出现问题。
【问题讨论】:
-
顺序重要吗?这是双重的。 (1, 2, 4) 与 (2, 1, 4) 不同吗?最终列表中出现的顺序 (1, 2, 4) 和 (3, 5, 7) 是否重要?
-
是的,订单很重要。 (1,2,4) 是一个单独的元组, (2,1,4) 是一个单独的元组。原始元组文件是通常按升序 (1,2,4) 或降序 (4,2,1) 顺序排列的有序元组,我想保持相同。在任何情况下,我都不会对具有相反顺序值的两个文件进行比较
-
最终列表中出现的顺序 (1,2,4) 和 (3,5,7) 无关紧要。但是,我可以通过编写函数来根据元组的索引对元组的外观进行排序。
-
也许这对你有帮助:stackoverflow.com/questions/3462143/…。使用集合而不是列表
标签: python csv duplicates tuples