我正在做一些导出到csv,我的字段名有问题。 我想要3行“fieldnames”
Row 1 : Field 1:empty ; Field 2:"YEAR" , Field3:"2017"
Row 2 : Field 1:empty ; Field 2:"MONTH", Field3: month.number
Row 3 : Field 1:"STATION"; Field 2:"CODE" , Field3: day.number
由于我不知道如何联合细胞,因此2017年将所有细胞合并到12/365细胞之上,或者每个月(例如Jan)将31个细胞合并在一起。我用2017年或1月打印每个单元格(31次) 2月(28次)等。
import csv
import calendar
from datetime import datetime
HYear= [' ','Year','2017']
HMonth=[' ','Month','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug',
'Sep','Oct','Nov','Dec']
HDay= ['Station','Code','01','02','03','04','05','06','07',
'08','09','10','11','12','13','14','15','16','17','18',
'19','20','21','22','23','24','25','26','27','28','29','30','31']
#VARs
today = datetime.today()
num_day = today.day
num_month = today.month
mon1 = calendar.monthrange(2017, 1)[1] ###31
mon2 = calendar.monthrange(2017, 2)[1]+mon1###59
mon3 = calendar.monthrange(2017, 3)[1]+mon2###90
mon4 = calendar.monthrange(2017, 4)[1]+mon3
mon5 = calendar.monthrange(2017, 5)[1]+mon4
mon6 = calendar.monthrange(2017, 6)[1]+mon5
mon7 = calendar.monthrange(2017, 7)[1]+mon6
mon8 = calendar.monthrange(2017, 8)[1]+mon7
mon9 = calendar.monthrange(2017, 9)[1]+mon8
mon10= calendar.monthrange(2017,10)[1]+mon9
mon11= calendar.monthrange(2017,11)[1]+mon10
mon12= calendar.monthrange(2017,12)[1]+mon11
#Days in Year
for i in range(1,num_month):
d = calendar.monthrange(2017, i)[1]
num_day+=sum((0, d))
days_year = num_day###135 or so
#to CSV
def csv_dict_writer(path, fieldnames, data):
with open(path, "wb") as out_file:
writer = csv.DictWriter(out_file, delimiter=',', fieldnames=fieldnames)
writer.writeheader()
for row in data:
writer.writerow(row)
#####Headers
heady="%s,%s"%(HYear[0],HYear[1])
headm="%s,%s"%(HMonth[0],HMonth[1])
headd="%s,%s"%(HDay[0],HDay[1])
#####Adding more content to the headers
for i in range(2,days_year+2):###2-367
if i>1:
heady+=",%s"%HYear[2]
if i in range(2,mon1+2):###2-33
headm+=",%s"%HMonth[2]
headd+=",%s"%HDay[i]
elif i in range(mon1+2,mon2+2):###33-61
headm+=",%s"%HMonth[3]
headd+=",%s"%HDay[i-mon1]
elif i in range(mon2 +2,mon3 +2):
headm+=",%s"%HMonth[4]
headd+=",%s"%HDay[i-mon2]
elif i in range(mon3 +2,mon4 +2):
headm+=",%s"%HMonth[5]
headd+=",%s"%HDay[i-mon3]
elif i in range(mon4 +2,mon5 +2):
headm+=",%s"%HMonth[6]
headd+=",%s"%HDay[i-mon4]
elif i in range(mon5 +2,mon6 +2):
headm+=",%s"%HMonth[7]
headd+=",%s"%HDay[i-mon5]
elif i in range(mon6 +2,mon7 +2):
headm+=",%s"%HMonth[8]
headd+=",%s"%HDay[i-mon6]
elif i in range(mon7 +2,mon8 +2):
headm+=",%s"%HMonth[9]
headd+=",%s"%HDay[i-mon7]
elif i in range(mon8 +2,mon9 +2):
headm+=",%s"%HMonth[10]
headd+=",%s"%HDay[i-mon8]
elif i in range(mon9 +2,mon10+2):
headm+=",%s"%HMonth[11]
headd+=",%s"%HDay[i-mon9]
elif i in range(mon10+2,mon11+2):
headm+=",%s"%HMonth[12]
headd+=",%s"%HDay[i-mon10]
elif i in range(mon10+2,mon12+2):
headm+=",%s"%HMonth[13]
headd+=",%s"%HDay[i-mon11]
print heady
print headm
print headd
###Creating CSV
if __name__ == "__main__":
data=[heady.split(","),
headm.split(","),
headd.split(",")]
my_list = []
fieldnames = data[0]
for values in data[1:]:
inner_dict = dict(zip(fieldnames, values))
my_list.append(inner_dict)
path = "dict_output.csv"
csv_dict_writer(path, fieldnames, my_list)
在运行程序之后我得到的变量令人头疼,headm和headd是:(打印每个)
#Print Header Year
,Year,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017
#Print Header Month
,Month,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Feb,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Mar,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,Apr,May,May,May,May,May,May,May,May,May,May,May,May,May,May,May
#Print Header Day
Station,Code,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15
但是,我在csv中得到的标题是:
Row 1: empty, Year, 2017, 2017 ... (correct)
Row 2: Empty, Month, May, May ... (should be Jan not May)
Row 3-360+: Station, Code, 15, 15 ... (should be 01, 02, ..,31, 01, 02... and so on)
有什么建议吗? 提前谢谢!
PS:输出就像
empty, YEAR, 2017, 2017, 2017....*365
empty, MONTH, Jan, Jan, Jan...*31, Feb, Feb...*28.....
STATION, CODE, 01, 02, 03..., 31, 01, 02,...,28, 01.....
答案 0 :(得分:1)
修改csv writer方法和main以获取列表并将其写入您的文件!
#to CSV
def csv_writer(path, data):
with open(path, "wb") as out_file:
for row in data:
out_file.write(','.join(row))
out_file.write('\n')
###Creating CSV
if __name__ == "__main__":
data=[heady.split(","),
headm.split(","),
headd.split(",")]
#data = zip(*data)
print data
path = "dict_output.csv"
csv_writer(path, data)
示例输出:
,Year,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,..
,Month,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,Jan,..
Station,Code,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,..