1

我有以下 csv 文件,我想将其转换为输出,基本上它将第一列值作为键读取,然后将下一个值附加到列中

输入.csv

a.jpg,a,b
a.jpg,c,d
b.jpg,e,f
b.jpg,g,h
c.jpg,i,j
c.jpg,k,l
c.jpg,m,n
c.jpg,o,p
c.jpg,q,r
d.jpg,s,t
d.jpg,u,v
e.jpg,w,x
e.jpg,y,z

输出.csv

a.jpg a,b c,d
b.jpg e,f g,h
c.jpg i,j k,l m,n o,p q,r
d.jpg s,t u,v
e.jpg w,x y,z

我尝试了以下方法,但仍然无法弄清楚如何根据上面所需的格式解压缩值以输出 csv

import csv

with open('input.csv', 'r', newline='') as input_csv, open('output.csv', 'w', newline='') as output_csv:

filename = {}

for row in csv.reader(input_csv):
    if row[0] not in filename:
        filename[row[0]]=[[row[1],row[2]]]
    else:
        filename[row[0]].append([row[1],row[2]])

for item in filename.items():
    print(item)

输出

('a.jpg', [['a', 'b'], ['c', 'd']])
('b.jpg', [['e', 'f'], ['g', 'h']])
('c.jpg', [['i', 'j'], ['k', 'l'], ['m', 'n'], ['o', 'p'], ['q', 'r']])
('d.jpg', [['s', 't'], ['u', 'v']])
('e.jpg', [['w', 'x'], ['y', 'z']])
4

3 回答 3

1

您可以为此使用熊猫

import pandas as pd

将输入 CSV 文件读取为:

df = pd.read_csv('input.csv',header=None)

按第一列对数据进行分组:

dff =df.groupby(0).apply(lambda x: list(x[1])+list(x[2]))

将每个组值写入输出 CSV 文件

for i in dff.iteritems():
    with open('output.csv','a') as out:
        out.write(','.join([i[0]]+i[1])+'\n')
于 2020-03-06T05:08:33.720 回答
0

检查这是否适合您。

dic = {}

for row in csv.reader(input_csv):
    key, *values = row.split(",")
    if key not in dic:
        dic[key] = []
    for value in values:
        dic[key].append(value)

for key, value in dic.items():
    value = ", ".join(value)
    print(f"{key} {value}")

输出:

a.jpg a, b, c, d
b.jpg e, f, g, h
c.jpg i, j, k, l, m, n, o, p, q, r
d.jpg s, t, u, v
e.jpg w, x, y, z
于 2020-03-09T04:01:24.647 回答
0

这是没有的代码pandas

import csv

with open('input.csv', 'r', newline='') as input_csv, open('output.csv', 'w', newline='') as output_csv:

    filename = {}

    for row in csv.reader(input_csv):
        if row[0] in filename:
            my_list = [row[1],row[2]]
            filename[row[0]].append(my_list)
        elif row[0] not in filename:
            filename[row[0]]=[[row[1],row[2]]]

    for item in filename:
        output_csv.write('{} {}\n'.format(item,
            ' '.join([','.join(l) for l in filename[item]])))

基本上我只改变了最后两行。

首先,我们需要遍历字典,然后为每个条目编写行。最后一行将键与值连接起来。该值本身是一个连接列表项,分两步完成。

于 2020-03-09T03:39:54.687 回答