python 如何将新列添加到CSV文件?




3 Answers

我很惊讶没有人建议熊猫。 尽管使用像Pandas这样的一组依赖关系似乎比这么简单的任务所需要的更加严厉,但它产生了一个非常短的脚本,而Pandas是一个很棒的库,用于执行各种CSV(实际上是所有数据类型)数据操作。 无法与4行代码争论:

import pandas as pd
csv_input = pd.read_csv('input.csv')
csv_input['Berries'] = csv_input['Name']
csv_input.to_csv('output.csv', index=False)

查看Pandas网站了解更多信息!

output.csv内容:

Name,Code,Berries
blackberry,1,blackberry
wineberry,2,wineberry
rasberry,1,rasberry
blueberry,1,blueberry
mulberry,2,mulberry
python csv python-3.x

我有几个CSV文件,如下所示:

Input
Name        Code
blackberry  1
wineberry   2
rasberry    1
blueberry   1
mulberry    2

我想为所有CSV文件添加一个新列,以便它看起来像这样:

Output
Name        Code    Berry
blackberry  1   blackberry
wineberry   2   wineberry
rasberry    1   rasberry
blueberry   1   blueberry
mulberry    2   mulberry

我到目前为止的脚本是这样的:

import csv
with open(input.csv,'r') as csvinput:
    with open(output.csv, 'w') as csvoutput:
        writer = csv.writer(csvoutput)
        for row in csv.reader(csvinput):
            writer.writerow(row+['Berry'])

(Python 3.2)

但是在输出中,脚本会跳过每一行,新列中只包含Berry:

Output
Name        Code    Berry
blackberry  1   Berry

wineberry   2   Berry

rasberry    1   Berry

blueberry   1   Berry

mulberry    2   Berry



我使用了pandas并且运行良好...当我使用它时,我不得不打开一个文件并向其添加一些随机列,然后仅保存回同一个文件。

此代码添加了多个列条目,您可以根据需要进行编辑。

import pandas as pd

csv_input = pd.read_csv('testcase.csv')         #reading my csv file
csv_input['Phone1'] = csv_input['Name']         #this would also copy the cell value 
csv_input['Phone2'] = csv_input['Name']
csv_input['Phone3'] = csv_input['Name']
csv_input['Phone4'] = csv_input['Name']
csv_input['Phone5'] = csv_input['Name']
csv_input['Country'] = csv_input['Name']
csv_input['Website'] = csv_input['Name']
csv_input.to_csv('testcase.csv', index=False)   #this writes back to your file

如果你想要那个单元格值没有得到复制,那么首先要手动在你的csv文件中创建一个空列,就像你把它命名为Hours那样,现在你可以在上面的代码中添加这一行,

csv_input['New Value'] = csv_input['Hours']

或者我们可以在不添加手动色谱柱的情况下完成

csv_input['New Value'] = ''    #simple and easy

我希望它有所帮助。




这段代码足以满足您的要求,我已经测试了示例代码。

import csv

with open(in_path, 'r') as f_in, open(out_path, 'w') as f_out:
    csv_reader = csv.reader(f_in, delimiter=';')
    writer = csv.writer(f_out)

    for row in csv_reader:
    writer.writerow(row + [row[0]]



Related