Python - 在循环中转换.csv列的时间
我有一个很大的 .csv 文件,里面存储了一些录音的数据。其中有一个字段是录音的时间,我需要把这个时间转换一下,以便后面能用。
*Col 0, hh:mm:ss, col 2, col 3,...*
我知道怎么把一个时间值转换成我想要的格式,这个方法是有效的。
import decimal
from datetime import datetime
time = "14:55:36.629"
(hour,min,sec) = time.split(':')
result = int(hour) * 3600 + int(min) * 60 + float(sec)
decimal.Decimal(result)
但是我不知道怎么把这个方法放进一个循环里去处理多个值。
with open('input.csv', 'r') as inf, open('output.csv','wb') as outf:
for row in inf:
t = row[1]
(h,m,s) = row[1].split(':') # Error here
result = int(h) * 3600 + int(m) * 60 + float(s)
decimal.Decimal(result)
outcsv = csv.writer(outf, delimiter=',')
我在转换的过程中遇到了困难,同时我也不确定之后能不能把处理好的信息写入另一个文件。请问我该怎么把这一列的所有值都转换并解析出来呢?
其实我也可以选择直接覆盖原来的文件,而不是再打开一个新文件把信息写进去。
2 个回答
2
你需要真正地把输入文件当作CSV格式来读取。下面是一些对比和示例数据:
>>> demo = ['id,time,data', '1,14:17:33,7', '2,14:17:34,10']
直接遍历“文件”:
>>> for row in demo:
row[1]
'd'
','
','
把它当作CSV格式读取后遍历:
>>> import csv
>>> for row in csv.reader(demo):
row[1]
'time'
'14:17:33'
'14:17:34'
或者,为了让你的代码更清晰(假设你有表头行):
>>> for row in csv.DictReader(demo):
row['time']
'14:17:33'
'14:17:34'
1
这个解决方案是把输出写到一个不同的文件里。如果你想把结果写到同一个文件里,你需要先把输入文件的内容加载进来,处理成一行一行的列表,然后再写回到同一个文件里。
import csv
with open('input.csv', 'r') as inf, open('output.csv','wb') as outf:
reader = csv.reader(inf, delimiter=',')
writer = csv.writer(outf, delimiter=',' )
for row in reader:
t = row
(h,m,s) = t[1].split(':')
result = int(h) * 3600 + int(m) * 60 + float(s)
t[1] = result
writer.writerow(t)