我一直在尝试解析文本文件并使用正则表达式对其进行操作。 这是我的剧本:
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:\Python32\lib\re.py", line 167, in sub
return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or buffer
为什么我会收到此错误?
答案 0 :(得分:2)
original_file
是一个文件对象,你需要read来获取它的内容,或者正则表达式所需的缓冲区。
通常情况下,使用with
也是好的(只是因为你不必记住关闭文件),所以你可能会得到这样的结果:
import re
with open('jokes.txt', 'r+') as original_file:
contents = original_file.read()
new_contents = re.sub(r"\d+\. ", "", contents)
你会看到我在代码中生成了正则表达式字符串(我在正则表达式字符串之前使用了r
)。这也是一种很好的做法,因为有时候你必须双倍地逃避一些角色才能让它们像你期望的那样正常行事。
答案 1 :(得分:1)
您拨打original_file.read()
,但未将该值分配给任何内容。
>>> original_file = open('test.txt', 'r+')
>>> original_file.read()
'Hello StackOverflow,\n\nThis is a test!\n\nRegards,\naj8uppal\n'
>>> 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)
我还建议像@Jerry一样使用with
,这样就不必关闭文件来保存写作。