我正在尝试使用 python ( mainly this example ) 将日志文件转换为 csv
import csv
with open('/home/user/Downloads/my.log') as file:
lines = file.read().splitlines()
lines = [lines[x:x+2] for x in range(0, len(lines), 3)]
with open('test.csv', 'w+') as csvfile:
w = csv.writer(csvfile)
w.writerows(lines)
print "done"
我的原始日志文件如下所示:
2017-08-09 -> 11:30:01
Temp=29.0* Humidity=30.0%
2017-08-09 -> 11:40:01
Temp=29.0* Humidity=33.0%
从上面的示例代码,我可以将其转换成这种格式
2017-08-08 -> 08:50:01,Temp=33.0* Humidity=38.0%
2017-08-08 -> 09:00:01,Temp=37.0* Humidity=40.0%
但我需要我的最终 csv 看起来像这样
2017-08-08,08:50:01,33.0*,38.0%,
2017-08-08,09:00:01,37.0*,40.0%
我使用了 lines = lines.replace("->",",")
并且得到了
AttributeError: 'list' object has no attribute 'replace'
据我了解,python 无法替换其在内存中处理的文本文件。那我能做什么?我可以用什么方法来净化最终文本?
我的python知识没有进阶,还在学习中。因此,如果有错误或遗漏的步骤,请指正。
提前致谢
最佳答案
更新:完整修改代码
with open('/home/user/Downloads/my.log') as file, open("output.csv", "w") as outfile:
lines = file.readlines()
lines = [','.join([i.strip() for i in lines[x:x+2]]) for x in range(0, len(lines), 3)]
lines = [i.replace("->",",").replace(" ","").replace("Temp=","").replace("Humidity=",",") for i in lines]
outfile.write("Date,Time,Temp,Humidity")
for line in lines:
outfile.write(line)
输出
Date,Time,Temp,Humidity
2017-08-08,08:50:01,33.0*,38.0%
2017-08-08,09:00:01,37.0*,40.0%
工作环示例
datafile="""2017-08-09 -> 11:30:01
Temp=29.0* Humidity=30.0%
2017-08-09 -> 11:40:01
Temp=29.0* Humidity=33.0%"""
lines = io.StringIO(datafile).readlines()
lines = [','.join([i.strip() for i in lines[x:x+2]]) for x in range(0, len(lines), 3)]
lines = [i.replace("->",",").replace(" ","").replace("Temp=","").replace("Humidity=",",") for i in lines]
lines
返回:
['2017-08-09,11:30:01,29.0*,30.0%', '2017-08-09,11:40:01,29.0*,33.0%']
关于python - 从日志写入 csv 时替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45584064/