python - 如何在不使用 panda 的情况下在 python 中加入 2 个 csv?

标签 python csv join

一个 csv 文件包含以下列

计数、持续时间、项目、ID

1,na,na,123
2,na,na,456
3,na,na,789

其他 csv 文件包含

xyz_id,xyz_图像

123,1
123,2
123,3
123,4
123,56
123,7
123,8
456,9
456,12
456,23

条件是我不能使用pandas,那么如何加入这2个csv文件?

期望的输出是

xyz_id、xyz_images、计数、持续时间、项目、id

123,1,1,na,na,123
123,2,1,na,na,123
123,3,1,na,na,123
123,4,1,na,na,123
123,56,1,na,na,123
123,7,1,na,na,123
123,8,1,na,na,123
456,9,2,na,na,456
456,12,2,na,na,456
456,23,2,na,na,456

动机是将两个 csv 的 ID 连接在一起以合并在 1 个文件中。

with open('/home/user/Downloads/FW__Json_FIles/withoutpanda.csv') as f,open('/home/user/Downloads/FW__Json_FIles/forms.csv') as csvfile1:
reader1 = csv.reader(f,delimiter='|')
reader2=csv.reader(csvfile1,delimiter='|')
try:
    for row1 in reader1:
        print(row1[0])
    for row2 in reader2:
        print (row2[3])
except csv.Error as e:
    sys.exit('file {}, line {}: {}'.format(filename, reader.line_num, e))

在此之后,我无法检查如何根据这 2 个键作为 row1[0] 和 row2[3] 连接这 2 个文件

最佳答案

您可以为两个 CSV 创建列表列表,并使用 for 循环手动执行连接:

records1=[]
with open('csvfile1', 'r') as f:
    for line in f:
        records1.append(line.split(','))

records2=[]
with open('csvfile2', 'r') as f:
    for line in f:
        records2.append(line.split(','))


for (count, duration, items, id_) in records1:
    for (xyz_id, xyz_images) in records2:
        if id_ == xyz_id:
            print(xyz_id, xyz_images, count, duration, items, id_, sep=',')

打印:

123,1,1,na,na,123
123,2,1,na,na,123
123,3,1,na,na,123
123,4,1,na,na,123
123,56,1,na,na,123
123,7,1,na,na,123
123,8,1,na,na,123
456,9,2,na,na,456
456,12,2,na,na,456
456,23,2,na,na,456

如果行数很高,并且性能成为问题,请考虑将数据索引到列表字典中,并用字典查找替换内部 for 循环。


如果您必须将所有这些列输出到 csv 文件中,请执行以下操作:

with open(sys.argv[1], "w") as of:
    writer=csv.writer(of,delimiter='|')
    for (count, duration, items, id_) in records1:
        for (xyz_id, xyz_images) in records2:
            if id_ == xyz_id:
                writer.writerow([xyz_id, xyz_images, count, duration, items, id_])

关于python - 如何在不使用 panda 的情况下在 python 中加入 2 个 csv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50314757/

相关文章:

python - 如何在 Flask 模板中显示当前年份?

python - 如何在 SAP Logon 中自动执行重复任务

python - 读取 csv 标题空白和不区分大小写

php - 我应该对这个 MYSQL 查询使用 JOIN 还是 UNION ?

hadoop - 无法在配置单元查询中的 case 语句中聚合

python - 计算多元正态分布python的均值向量

python - 如何从列表中打印随机值名称?(python)

c - 如何使用 C 中的 CSV 文件中的字符串 (char*) 填充二维数组

python - 使用 csv.DictReader 逐行比较两个 .csv 文件中的两列

MySQL连接3个表并在一张表中找到 "missing"行