使用Python在CSV上添加新列

时间:2015-08-08 00:03:37

标签: python csv

我有以下数字列表:['Number', 1,2,3,4]

如果我有以下CSV文件:

`Name`    
`First`
`Second`
`Third`
`Fourth`

如何将我的数字列表添加到其中并使其如下所示:

`Name    Number`
`First   1`
`Second  2`
`Third   3`
`Fourth  4`

3 个答案:

答案 0 :(得分:1)

您可以fileinput.input使用inplace=True来修改原始文件:

import fileinput
import sys
l =['Number', 1,2,3,4]
for ind, line in enumerate(fileinput.input("in.csv",inplace=True)):
    sys.stdout.write("{} {}\n".format(line.rstrip(), l[ind]))

输入:

Name    
First
Second
Third
Fourth

输出:

Name Number
First 1
Second 2
Third 3
Fourth 4

或写入临时文件并使用shutil.move移动以替换原始文件:

l =['Number', 1,2,3,4]
from shutil import move
from tempfile import NamedTemporaryFile
with open('in.csv') as csvfile, NamedTemporaryFile("w",dir=".", delete=False) as temp:
    r = csv.reader(csvfile)
    wr = csv.writer(temp,delimiter=" ")
    for row,new in zip(r,l):
        wr.writerow(row+[new])

move(temp.name,"in.csv")

答案 1 :(得分:0)

import csv

with open('existing_file.csv', 'rb') as infile:
    reader = csv.reader(infile)
    your_list = list(reader)

list2 = ['Number', 1,2,3,4]

zipped= zip(your_list, list2)

with open("test.csv", "wb") as outfile:
    writer = csv.writer(outfile)
    writer.writerows(zipped)

答案 2 :(得分:0)

不是一种优雅的方式,但它有效:

#!/usr/bin/python

import csv
import sys

def csv_to_dict(csv_file_path):
    csv_file = open(csv_file_path, 'rb')
    csv_file.seek(0)
    sniffdialect = csv.Sniffer().sniff(csv_file.read(10000), delimiters='\t,;')
    csv_file.seek(0)
    dict_reader = csv.DictReader(csv_file, dialect=sniffdialect)
    csv_file.seek(0)
    dict_data = []
    for record in dict_reader:
        dict_data.append(record)
    csv_file.close()

    return dict_data

def dict_to_csv(csv_file_path, dict_data):
    csv_file = open(csv_file_path, 'wb')
    writer = csv.writer(csv_file, dialect='excel')

    headers = dict_data[0].keys()
    writer.writerow(headers)

    for dat in dict_data:
        line = []
        for field in headers:
            line.append(dat[field])
        writer.writerow(line)

    csv_file.close()

if __name__ == '__main__':
    org_path = sys.argv[1]
    new_path = sys.argv[2]
    your_array = ['Number', 1, 2, 3, 4]

    org_csv = csv_to_dict(org_path)
    new_data = []
    for line in org_csv:
        new_line = dict()
        new_line['Name'] = line['Name']
        new_line[your_array[0]] = your_array[org_csv.index(line)+1]
        new_data.append(new_line)
    if new_data:
        dict_to_csv(new_path, new_data)

希望这会有所帮助!