我有这个python代码,
open('%s.log'%hname,'w').writelines([ line for line in open('%s_tmp.log' %hname) if 'word' in line])
这将打印与%hname_tmp.log
:
b'line contains blah\n'
b'This is the next line\n'
我想在写入新文件之前删除b'
和\n'
。像这样:
line contains blah
This is the next line
我该怎么做?我试过了
...writelines([line.rstrip() ...
,
但是这会将新日志文件中的所有内容整合到一行中,同时仍保留\n'
。
答案 0 :(得分:2)
以二进制打开输出文件:
open('%s.log'%hname, 'wb').writelines([ line for line in open('%s_tmp.log' %hname) if 'word' in line])
在编写之前或解码 bytes
个对象:
open('%s.log'%hname, 'w').writelines([line.decode('ascii') for line in open('%s_tmp.log' %hname) if 'word' in line])
如果您的原始日志文件包含这些字符,则您将二进制数据写入该日志文件。您可以使用ast.literal_eval()
utility function:
from ast import literal_eval
with open('%s.log'%hname, 'wb') as outfile:
outfile.writelines(literal_eval(line.rstrip()) for line in open('%s_tmp.log' %hname) if 'word' in line)
literal_eval()
接受表示Python文字的字符串,并将其转换回Python对象,就像Python编译器一样。
答案 1 :(得分:0)
您正在将文件读取为二进制文件。尝试使用'rt'
打开。
open('%s.log'%hname,'wt').writelines([ line for line in open('%s_tmp.log' %hname, 'rt') if 'word' in line])