Skip to main content
 首页 » 编程设计

python之从日志写入 csv 时替换字符串

2025年05月04日29bhlsheji

我正在尝试使用 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%']