Python 2.7 格式化数据以写入CSV

1 投票
1 回答
750 浏览
提问于 2025-04-18 00:22

我正在尝试把数据写入一个CSV文件。我有来自几个传感器的数据,还有一个实时钟表提供的时间和日期。传感器的数据没问题,但我在格式化RTC(实时钟表)数据时总是绕圈子。我试了很多方法,也看了不少相关的帖子,但我的脑袋有点跟不上了。

时钟数据在val里

#print "second =", val[0]
#print "minute =", val[1]
#print "hour =", val[2]
#print "day of week =", val[3]
#print "day of month =", val[4]
#print "month =", val[5]
#print "year =", val[6]

比如说,这段代码会打印出时间,后面跟着日期。

print "RTC Time is ", val[2], ":", val[1], ":", val[0]
print "RTC Date is ", val[4], "/", val[5], "/", "20",val[6]

我离我真正想要的结果最近的就是这个。

   import csv

   datetime = val[6],val[5],val[4],val[2],val[1],val[0]

   filecsv = open('tidelog.csv', 'a+') #writing to csv log file
   writer = csv.writer(filecsv,dialect='excel')
   stuff = [datetime, temp_inside, humidity, press, response]
   writer.writerow(stuff)
   filecsv.close()

输出的CSV文件看起来是这样的

"(14, 3, 28, 15, 52, 37)",29,47,1005,2208

日期/时间格式是yy mm dd hh mm ss,放在引号里面。

我想要的是第一列的日期时间用连字符分隔,像下面这样。

14-3-28-15-52-37,29,47,1005,2208

任何帮助都非常感谢

德里克

1 个回答

1

你可以用join和一个连字符来这样做:

>>> val
[37, 52, 15, 4, 28, 3, 14]
>>> '-'.join(str(x) for x in [val[6],val[5],val[4],val[2],val[1],val[0]])
'14-3-28-15-52-37'

你的方法不奏效,因为你实际上是在创建一个元组:

>>> 1,2,3
(1, 2, 3)
>>> val[6],val[5],val[4],val[2],val[1],val[0]
(14, 3, 28, 15, 52, 37)

编辑

正如评论中提到的,你可以对你的列表使用reversed,而不是一个一个地索引:

>>> list(reversed([1,2,3,4,5]))
[5, 4, 3, 2, 1]

撰写回答