从csv文件

时间:2017-09-14 19:00:57

标签: python-3.x replace logfile

我的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\"并替换它们但它不起作用。 我的主要问题是定义我需要替换的东西。根据我的理解,应该是每个"和每个空行。

1 个答案:

答案 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'}

您很可能想要添加一些代码来解码日期等等。