txt约为22,000行,约为3.5MB.它中有很多重复的行.我只是想删除重复的行以及一些包含不需要的特定字符串的行.
我的方法是使用readlines()方法将文件读入大列表,然后使用read()方法将文件作为大字符串读取.迭代列表,计算出现次数,用""(空字符串)替换该行.我花了10分钟才完成这份工作?!
有没有快速的方法来做到这一点?
非常感谢!
我几乎总是使用生成器进行文件处理。这使得代码快速、易于修改且易于测试。
首先,构建一个删除重复项的生成器:
def remove_duplicates(seq):
found = set()
for item in seq:
if item in found:
continue
found.add(item)
yield item
Run Code Online (Sandbox Code Playgroud)
有效吗?
>>> print "\n".join(remove_duplicates(["aa", "bb", "cc", "aa"]))
aa
bb
cc
Run Code Online (Sandbox Code Playgroud)
显然是这样。接下来,创建一个函数来告诉您一行是否正常:
def is_line_ok(line):
if "bad text1" in line:
return False
if "bad text2" in line:
return False
return True
Run Code Online (Sandbox Code Playgroud)
这有效吗?
>>> is_line_ok("this line contains bad text2.")
False
>>> is_line_ok("this line's ok.")
True
>>>
Run Code Online (Sandbox Code Playgroud)
现在我们可以将remove_duplicatesanditertools.ifilter与我们的函数一起使用:
>>> seq = ["OK", "bad text2", "OK", "Also OK"]
>>> print "\n".join(remove_duplicates(ifilter(is_line_ok, seq)))
OK
Also OK
Run Code Online (Sandbox Code Playgroud)
此方法适用于返回字符串的任何可迭代对象,包括文件:
with open(input_file, 'r') as f_in:
with open(output_file, 'w') as f_out:
f_out.writelines(remove_duplicates(ifilter(is_line_ok, f_in)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1834 次 |
| 最近记录: |