我需要从列表中获取信息,并从名称中获取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()
答案 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()
希望这有帮助。