TypeError:预期字符串或缓冲区| Python



我一直在尝试解析文本文件并使用正则表达式操作它。这是我的脚本:

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,这样你就不必关闭文件来保存写入。

最新更新