Python:添加值和写入输出

时间:2015-09-09 06:08:03

标签: python csv for-loop

我需要从列表中获取信息,并从名称中获取add a column year。我仍然不确定如何在记录中添加一个字段'year'我可以使用附加功能吗? 关于输出文件,我只需要使用outputcsv.writerow(records) isn'它? 这是我坚持的代码的一部分:

filenames = ('babyQld2010.csv',     
    'babyQld2011.csv',
    'babyQld2012.csv', 
    'babyQld2012.csv',
    'babyQld2014.csv')

outFile = open('babyQldAll.csv','w') 
csvFile_out = csv.writer(outFile, delimiter=',')

for filename in filenames:
    name, ext = filename.split('.')
    year = name[-4:]     #extract year from  file names
    records = extract_names(filename)

    # Get (name, count, gender)  from  list "records", 
    # and add value of "year" and write into output file (using "for" loop )

输出文件如下:

2010,Lola,69,Girl

输入,我有5个文件babyQld2010.csv, babyQld2011.csv, babyQld2012.csv, babyQld2012.csv, babyQld2014.csv,其中包含:

Mia,425,William,493

我必须以格式对其进行排序,我已经完成并保存在列表'records'

Lola,69,Girl

现在我需要添加一个字段'year' on 'record'列表并导出csv file

这是我的完整代码:

import csv

def extract_names(filename):
    ''' Extract babyname, count, gender from a csv file,
    and return the data in a list.
    '''

    inFile = open(filename, 'rU')
    csvFile = csv.reader(inFile, delimiter=',')

    # Initialization
    records = []
    rowNum = 0

    for row in  csvFile:

        if rowNum != 0:

            # +++++ You code here ++++
            # Read each row of csv file and save information  in list 'records'
            # as (name, count, gender) 
            records.append([row[0], row[1], "Female"])
            records.append([row[2], row[3], "Male"])
            print('Process each row...')      

        rowNum += 1

    inFile.close()
    return(records)



#### Start main program  #####

filenames = ('babyQld2010.csv',     
    'babyQld2011.csv',
    'babyQld2012.csv', 
    'babyQld2012.csv',
    'babyQld2014.csv')

with open('babyQldAll.csv','w') as outFile:

    csvFile_out = csv.writer(outFile, delimiter=',')

    for filename in filenames:
        name, ext = filename.split('.')
        year = name.split('.')[0][-4:]     #extract year from  file names
        records = extract_names(filename)
        for record in records:
            csvFile_out.write([year] + record)
    print("Write in csv file...")     

outFile.close()

2 个答案:

答案 0 :(得分:1)

要从csv文件中获取年份,您只需将字符串拆分为'.',然后从拆分的第一部分中取出最后四个字符。示例 -

>>> s = 'babyQld2010.csv'
>>> s.split('.')[0][-4:]
'2010'

然后只是简单地遍历您所说的正确的记录列表,对于其中的每个列表,使用列表连接创建一个包含开头年份的新列表并将其写入csv文件。

我还建议您使用with语句打开要写入的文件(甚至在您从其他csv文件中读取的函数中)。示例 -

filenames = ('babyQld2010.csv',     
    'babyQld2011.csv',
    'babyQld2012.csv', 
    'babyQld2012.csv',
    'babyQld2014.csv')

with open('babyQldAll.csv','w') as outFile:

    csvFile_out = csv.writer(outFile, delimiter=',')

    for filename in filenames:
        name, ext = filename.split('.')
        year = name.split('.')[0][-4:]     #extract year from  file names
        records = extract_names(filename)
        for record in records:
            csvFile_out.writerow([year] + record)

答案 1 :(得分:0)

是的,当您从源文件中读取时,您可以将year列附加到每一行。你可以阅读&将每一行写成字典,以便在需要按顺序进行按摩时,可以使用现有的列标题来处理数据。

使用csv.DictWriter()方法,在设置时指定标题(fieldnames)。然后,您可以使用writeheader()方法将其写出来。

import csv
file_list = ['babyQld2010.csv',     
             'babyQld2011.csv',
             'babyQld2012.csv', 
             'babyQld2012.csv',
             'babyQld2014.csv']
outFile = open('babyQldAll.csv', 'wb')
csv_writer = csv.DictWriter(outFile, 
                            fieldnames=['name','count','gender','year'])
csv_write_out.writeheader()

for a_file in file_list:
    name,ext = a_file.split('.')
    year = name[-4:]
    with open(a_file, 'rb') as inFile:
        csv_read_in = csv.DictReader(inFile)
        for row in csv_read_in:
            row['year'] = year
            csv_writer.writerow(row)

outfile.close()

希望这有帮助。