python - 使用特定于列的重复过滤器在 Python 中将行 append 到 CSV

标签 python list csv append

因此,我希望 Python 使用 csv 读取器/写入器获取目录中的所有 CSV 并将它们组合起来,同时过滤掉第二列中包含任何其他行值的重复项的任何行。

这是我不起作用的脚本:

import csv
import glob

with open('merged.csv','a') as out:
    seen = set()
    output = []
    out_writer = csv.writer(out)
    csv_files = [f for f in glob.glob('*.csv') if 'merged' not in f]
#csv_files = glob.glob('*.csv') 
     # I'd like to use all files including the output so that I don't
     # have to rename it when reusing the script - it should dupe-filter itself!
for filename in csv_files:
    with open(filename, 'rb') as ifile:
        read = csv.reader(ifile, delimiter=',')
        for row in read:
            if row[1] not in seen:
                seen.add(row[1])
                if row: #was getting extra rows
                    output.append(row)
out_writer.writerows(output)

我觉得我一定错过了一些简单的事情。我的每个文件大小约为 100MB,我最终希望将其自动化,以便不同的计算机可以共享合并的文件以进行重复检查。

为了额外加分,我如何更改此设置以检查具有 row[1]row[2] 共同的行? (当然,一旦欺骗过滤器和自包含起作用......)

最佳答案

我建议使用 pandas 而不是 csv writer。我会将您的代码重写为如下所示:

import pandas as pd
import glob

data = pd.concat([pd.DataFrame.from_csv(file) for
                  file in glob.glob("*.csv")]).drop_duplicates(cols=COLNAME_LIST)
data.to_csv('merged.csv')

完全公开,我还没有测试过这段代码,因为我没有大量的 csv 文件,但我之前已经成功编写过类似的东西

关于python - 使用特定于列的重复过滤器在 Python 中将行 append 到 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19716721/

相关文章:

python - Qt4 中的 PushButton 没有动画

python - 如何打印行和列标签以输出csv文件

python - 使用Python删除不包含正则表达式匹配的单元格/行

list - 计算列表中原子的所有出现次数? - 口齿不清

java - 将子类对象添加到父类(super class)列表中

php - 使用 PDO 加载 CSV 文件会导致语法错误

python - 从文本文件复制数据并将其插入 URL

python - 是否有 python 方法根据提供的新索引重新排序列表?

python - 使用 Python 请求的异步请求

python - 如何找到列表中值的索引,增加值?