从 csv 文件中删除 \r\n\r\n

Remove \r\n\r\n from csv File

我的日志文件看起来是这样的,因为我不小心添加了一个由 \r\n\r\n 组成的字符串到日志脚本(Arduino 上传到 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

因此日志文件中的所有空行和 " 都应该被删除。 python 3.x 中转换 LogFile 的最佳方法是什么。我在 python 中尝试了一些使用 csv reader 的方法,例如在行中寻找 \r\n\r\n\" 并替换它们,但它没有用。 我的主要问题是定义我正在寻找需要更换的东西。据我了解,应该是每个 " 和每个空行。

请注意 csv 模块的 DictReader 接受任何支持迭代器协议的对象(或多或少)。这意味着我们可以使用 returns 行的函数读取您的日志文件,并根据需要使用 yield 语句进行适当修改。

在这个函数中,我 return 第一行没有改变,除了去掉它的结束字符。当我遇到包含 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'}

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