如何在不覆盖旧内容的情况下将数据附加到csv文件的每一行?

时间:2017-11-07 16:41:16

标签: python python-3.x csv

我有一个.csv文件,其每行包含以逗号分隔的元素:

abc,233,345,400

我想将新数据附加到csv文件的每一行,但是不是以逗号分隔,而是在第一个附加元素之后,所附加的列应该以空格分隔。

例如,如果我要将列表[12,13,14]附加到上一行,那么它应该如下所示:

abc,233,345,400,12 13 14

但是,我被困在以下方面:

with open(csv_dir, 'r+', encoding='utf-8') as f:
    reader = csv.reader(f, delimiter=',')
    list = [12,13,14]
    for i in reader:
        i += list

现在,如果我将列表附加到行然后将其写回文件,整个行将被覆盖为逗号分隔。有什么出路吗?

3 个答案:

答案 0 :(得分:0)

您可以使用fileinput,这不是您想要的,但它有效:

import fileinput


for line in fileinput.input(filein, inplace=True):
    line = line + "," + " ".join(list) + "\n"
    sys.stdout.write(line)

答案 1 :(得分:0)

您可以使用Pandas。使用函数read_csv(您可以明确使用','分隔符或其他任何内容)阅读csv,并使用to_csv功能编写csv。这是一个例子:

import pandas as pd

def function_to_generate_new_column_values(row):
    return [12,13,14]

df = pd.read_csv('file1.csv', sep=',')
df['new_column'] = df.apply(lambda x: ' '.join(map(str, function_to_generate_new_column_values(x))), axis=1)
df.to_csv('file2.csv', sep = ',', header = True, mode = 'w', index=False)

您可以通过编辑函数" function_to_generate_new_column_values"将列表添加到每一行。在上面的代码上。

答案 2 :(得分:0)

看起来你正在执行单个元素追加,而不是像你真正想要的那样。

以下是根据您的数据和示例应该有效的示例。我为输出文件添加了一个csv_outdir值,以逐行写入。

with open(csv_dir, 'r+', encoding='utf-8') as f:
    with open(csv_outdir, 'w+', newline='') as outf:
        reader = csv.reader(f, delimiter=',')
        writer = csv.writer(outf, delimiter=',')
        list = [12, 13, 14]
        for i in reader:
            i.extend(list)
            writer.writerow(i)