我一直在尝试解析文本文件并使用正则表达式操作它。这是我的脚本:
import re
original_file = open('jokes.txt', 'r+')
original_file.read()
original_file = re.sub("d+. ", "", original_file)
如何修复以下错误:
Traceback (most recent call last):
File "filedisplay.py", line 4, in <module>
original_file = re.sub("d+. ", "", original_file)
File "C:Python32libre.py", line 167, in sub
return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or buffer
为什么我得到这个错误?
original_file
是一个文件对象,您需要读取它以获取其内容,或者regex需要的缓冲区。
通常,使用with
也很好(这样您就不必记住关闭文件了),所以您可能会得到这样的结果:
import re
with open('jokes.txt', 'r+') as original_file:
contents = original_file.read()
new_contents = re.sub(r"d+. ", "", contents)
您将看到我在代码中绘制了正则表达式字符串(我在正则表达式字符串之前使用了r
)。这也是一种很好的做法,因为有时您必须对某些字符进行双转义,才能使它们按照您的期望正常运行。
调用original_file.read()
,但不将该值赋给任何值。
>>> original_file = open('test.txt', 'r+')
>>> original_file.read()
'Hello StackOverflow,nnThis is a test!nnRegards,naj8uppaln'
>>> print original_file
<open file 'test.txt', mode 'r+' at 0x1004bd250>
>>>
因此,您需要分配original_file = original_file.read()
:
import re
original_file = open('jokes.txt', 'r+')
original_file = original_file.read()
original_file = re.sub("d+. ", "", original_file)
我还建议使用with
,如@Jerry,这样你就不必关闭文件来保存写入。