从 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'}
您很可能想添加一些代码来解码日期等。
我的日志文件看起来是这样的,因为我不小心添加了一个由 \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'}
您很可能想添加一些代码来解码日期等。