我的LogFile看起来像这样,因为我不小心在日志脚本中添加了一个由\r\n\r\n
组成的字符串(Arduino Upload to ThingSpeak):
created_at,entry_id,field1,field2
"2017-09-10 09:21:43 UTC,18,23.10,""48.70"
"
2017-09-10 10:20:35 UTC,19,23.10,48.30"
"
它应该是这样的:
created_at,entry_id,field1,field2
2017-09-10 09:21:43 UTC,18,23.10,48.70
2017-09-10 10:20:35 UTC,19,23.10,48.30
因此,应删除LogFile中的所有空行和"
。
在python 3.x中转换LogFile的最佳方法是什么。我在python中尝试了一些使用csv阅读器的方法,例如在行中查找\r\n\r\n
或\"
并替换它们但它不起作用。
我的主要问题是定义我需要替换的东西。根据我的理解,应该是每个"
和每个空行。
答案 0 :(得分:1)
请注意,csv模块的DictReader
接受任何支持迭代器协议的对象(或多或少)。这意味着我们可以在函数中读取您的日志文件,该函数使用yield
语句从中返回行,并根据需要进行适当修改。
在这个函数中,我将第一行保持不变,除了剥去它的终点字符。当我遇到包含UTC的行时,我会丢弃双引号字符并删除结束行。其他行完全被忽略。
>>> def csvfile():
... with open('logfile.txt') as logfile:
... first = True
... for line in logfile.readlines():
... if first:
... first = False
... yield line.strip()
... else:
... if 'UTC' in line:
... yield line.replace('"', '').strip()
... else:
... continue
...
这段代码显示了csvfile
完成的内容。
>>> for thing in csvfile():
... thing
...
'created_at,entry_id,field1,field2'
'2017-09-10 09:21:43 UTC,18,23.10,48.70'
'2017-09-10 10:20:35 UTC,19,23.10,48.30'
现在我们可以使用了它。该函数取代了文件。
>>> import csv
>>> reader = csv.DictReader(csvfile())
>>> for row in reader:
... row
...
{'created_at': '2017-09-10 09:21:43 UTC', 'field1': '23.10', 'entry_id': '18', 'field2': '48.70'}
{'created_at': '2017-09-10 10:20:35 UTC', 'field1': '23.10', 'entry_id': '19', 'field2': '48.30'}
您很可能想要添加一些代码来解码日期等等。