我有一个像这样的csv:
Name, TIME, TIME, TIME, TIME, Something, TIME, TIME, TIME, Something....
我想要使用所有TIME列并使用
转换它们datetime.datetime.fromtimestamp(TIME).strftime('%Y-%m-%d %H:%M:%S')
我正在尝试以下
def transform_date(TIME):
return datetime.datetime.fromtimestamp(TIME).strftime('%Y-%m-%d %H:%M:%S')
def transform_row(row):
return row[0] + [transform_date(row[1])] + [transform_date(row[2])] + [transform_date(row[3])] + [transform_date(row[4])] + row[5] + [transform_date(row[6])]+ [transform_date(row[7])] + [transform_date(row[8])] + row[8:]
name = 'FakeAPData.csv'
bakname = name + '.bak'
os.rename(name, bakname)
with open(bakname, 'rb') as csv_in, open(name, 'wb') as csv_out:
writer = csv.writer(csv_out)
writer.writerows(transform_row(row) for row in csv.reader(csv_in))
如何让transform_row变得更好?
答案 0 :(得分:3)
您可以使用map
:
return ([row[0]] + map(transform_date, row[1:5]) +
[row[5]] + map(transform_date, row[6:]))
这将依次将函数应用于每个项目并返回结果列表(在Python 2.x中 - 在3.x中它是迭代器)。
或者,让transform_date
处理无法处理输入的情况,并应用于整个row
:
def process_item(s):
try:
return datetime.datetime.fromtimestamp(s).strftime('%Y-%m-%d %H:%M:%S')
except ValueError:
return s
def transform_row(row):
return map(process_item, row)