Python - 在循环中转换.csv列的时间

0 投票
2 回答
603 浏览
提问于 2025-04-18 12:38

我有一个很大的 .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)

撰写回答