Python:添加值并写入输出
我需要从列表中获取信息,并从name中添加一列year。我仍然不知道如何在记录中添加一个字段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')
'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”