【发布时间】:2015-09-12 16:30:32
【问题描述】:
我得到了一个 csv 文件,其中包含几列和一个包含 4 行的标题。第一列包含时间戳。不幸的是,它也给出了毫秒,但只要它们为 00,文件中就不会给出它们。看起来是这样的:
"TOA5","CR1000","CR1000","E9048"
"TIMESTAMP","RECORD","BattV_Avg","PTemp_C_Avg"
"TS","RN","Volts","Deg C"
"","","Avg","Avg"
"2015-08-28 12:40:23.51",1,12.91,32.13
"2015-08-28 12:50:43.23",2,12.9,32.34
"2015-08-28 13:12:22",3,12.91,32.54
因为我不需要毫秒,所以我想去掉那些,因为这会使包含时间的进一步计算变得有点复杂。到目前为止我的方法:
提取每行的前 20 位数字,得到 2015-08-28 12:40:23 等格式
timestamp = []
with open(filepath) as f:
for _ in xrange(4): #skip 4 header rows
next(f)
for line in f:
time = line[1:20] #Get values for the current line
timestamp.append(time) #Add values to list
从这里开始,我一直在为如何继续前进而苦苦挣扎。我想将 csv 文件中的第一列与新创建的 timestamp 列表交换。
我尝试创建字典,但我不知道如何使用第 2 行中的标题标题作为键:
d = {}
with open(filepath, 'rb') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
for col in csv_reader:
#use header info from row 2 as key here
这会将整个 csv 文件导入到字典中,然后我将使用上面的 timestamp 列表更改字典中的 TIMESTAMP 条目。这甚至可能吗?
或者有没有一种更简单的方法来使用我的新列表更改 csv 中的第一列,以便我的 csv 文件最终包含时间戳,而没有毫秒信息?
所以我的 csv 中的第一列应该如下所示:
"TOA5"
"TIMESTAMP"
"TS"
""
2015-08-28 12:40:23
2015-08-28 12:50:43
2015-08-28 13:12:22
【问题讨论】:
-
你能展示一下文件的样子吗?尤其是您要获取的第 2 行的标题信息。
-
还建议添加您希望 csv 在您的操作后的样子。
-
我编辑了包含此信息的初始帖子
-
1/2是否也存在于文件中?文件本身中的标题是否都像这样引用?我建议您直接将 csv 的开头几行复制粘贴到此处。 -
更新了最初的帖子。文件中没有枚举,抱歉。但是,是的,报价就在那里。这就是它现在的实际样子(不过还有 30 列)。
标签: python list python-2.7 python-3.x