我正在处理两个CSV文件,它们都只包含一列数据,但超过50,000行。我需要比较CSV1和CSV2中的数据,并删除这两个文件中显示的所有数据。如果可能的话,我想将最终数据列表打印为第三个CSV文件。
CSV文件包含用户名。我曾尝试运行重复数据删除脚本,但意识到这不会完全删除两个CSV文件中找到的条目,因为它只会删除用户名的重复项。这是我目前正在使用的工具,但是我已经知道这不会给我想要的结果。
var WidgetLAECarouselHandler = function ($scope, $) {
var carousel_elem = $scope.find('.lae-carousel, .lae-posts-carousel, .lae-gallery-carousel, .lae-services-carousel').eq(0);
if (carousel_elem.length > 0) {
var settings = carousel_elem.data('settings');
var arrows = settings['arrows'];
var dots = settings['dots'];
var autoplay = settings['autoplay'];
我编写此代码的方式将在运行脚本后在终端中打印结果,但我意识到我的输出可能约为1000个条目。
答案 0 :(得分:0)
# define the paths
fpath1 = "/path/to/file1.csv"
fpath2 = "/path/to/file2.csv"
fpath3 = "/path/to/your/file3.csv"
with open(fpath1) as f1, open(fpath2) as f2, open(fpath3, "w") as f3:
l1 = f1.readlines()
l2 = f2.readlines()
not_in_both = [x for x in set(l1 + l2) if x in l1 and x in l2]
for x in not_in_both:
print(x, file=f3)
with open() as ...
子句负责关闭文件。
您可以在with
下合并几个文件开头。
假设文件中的元素是每行唯一的元素,我使用了简单的readlines()
(它会自动删除结尾的换行符)。否则,它将在此步骤中变得更加复杂。
使用列表表达式可以很好地按条件过滤列表。
end='\n'
中的默认print()
在每次打印结束时都会添加换行符。
以您的方式
有关格式代码,请遵循官方的样式指南,例如 https://www.python.org/dev/peps/pep-0008/
def select_exclusive_accounts(path_to_f1,path_to_f2, path_to_f3):
# you have quite huge indentations - use 4 spaces!
with open(path_to_f1) as f1, open(path_to_f2) as f2, \
open(path_to_f3, "w") as f3:
for item in in_f1:
if item not in in_f2:
f3.write(item)
for i in in_f2:
if i not in in_f1:
f3.write(item)
select_exclusive_accounts("AD_Accounts.csv",
"BA_Accounts.csv",
"exclusive_accounts.csv")
这里也不需要导入,因为这些是标准的Python命令。