我有一个.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
现在,如果我将列表附加到行然后将其写回文件,整个行将被覆盖为逗号分隔。有什么出路吗?
答案 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)