Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:添加值并写入输出_Python_Csv_For Loop - Fatal编程技术网

Python:添加值并写入输出

Python:添加值并写入输出,python,csv,for-loop,Python,Csv,For Loop,我需要从列表中获取信息,并从name中添加一列year。我仍然不知道如何在记录中添加一个字段'year'我可以使用append吗? 关于输出文件,我只需要使用outputcsv.writerow(记录)不是吗? 这是我坚持的代码的一部分: filenames = ('babyQld2010.csv', 'babyQld2011.csv', 'babyQld2012.csv', 'babyQld2012.csv', 'babyQld2014.csv')

我需要从列表中获取信息,并从name中添加一列year。我仍然不知道如何在记录中添加一个字段
'year'
我可以使用append吗? 关于输出文件,我只需要使用
outputcsv.writerow(记录)
不是吗? 这是我坚持的代码的一部分:

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
我必须按格式对它进行排序,我已经完成了排序并保存在列表中
“记录”

Lola,69,Girl
现在我需要在“记录”列表中添加一个字段
'year',并导出
csv文件

这是我的完整代码:

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()

要从csv文件中获取年份,只需在“
”处拆分字符串。
,然后从拆分的第一部分提取最后四个字符。范例-

>>> s = 'babyQld2010.csv'
>>> s.split('.')[0][-4:]
'2010'
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)
然后,只需简单地迭代您的记录列表,您说这是正确的,对于in中的每个列表,使用list contatenation创建一个新的列表,开始时带有年份,并将其写入csv文件

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

>>> s = 'babyQld2010.csv'
>>> s.split('.')[0][-4:]
'2010'
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)

是的,您可以在从源文件读入时将
年份
列附加到每一行。您可以将每一行作为字典进行读入和写出,这样,如果需要对数据进行处理,就可以使用现有的列标题来处理数据

使用
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()

希望这有帮助。

您能为您的程序显示输入/输出示例吗?python提供了
csv
功能:第62行以open('babyQldAll.csv','w')作为输出文件:^SyntaxError:它显示的语法无效,可能是您错过了关闭该行上方的一些偏执?你能显示完整的代码吗?对不起,我刚下班。我刚刚更新了@AnandSKumarI无法重现无效的语法错误,您确定这是行和完整的堆栈跟踪吗?如果是这样的话,你能用完整的回溯更新这个问题吗?我运行了,它出现了:回溯(上次的最新调用):文件“E:\SIT111\A1\data\writeCSVTPL.py”,第71行,在csvFile\u out中。write([year]+record)AttributeError:“\u csv.writer”对象没有属性“write”