2014-05-09 69 views
0

我一直试图解析一个文本文件,并用正则表达式来处理它。 这是我的脚本: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:\Python32\lib\re.py", line 167, in sub 
return _compile(pattern, flags).sub(repl, string, count) 
TypeError: expected string or buffer 

为什么我会收到这个错误?

+2

'original_file'是一个文件对象,您需要读取它以获取其内容或正则表达式所需的缓冲区。 – Jerry

+0

谢谢,我已经更新了代码,它仍然会抛出一个错误:/ –

+1

Err,您没有将缓冲区放在变量'original_file'中,所以您仍然在正则表达式中使用文件对象。你为什么不使用其他变量?像'contents = original_file.read()'? – Jerry

回答

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) 

你会看到我rawed代码中的正则表达式字符串(我在正则表达式字符串之前使用了r)。这也是一种很好的做法,因为有时候你必须加倍逃避某些角色才能让他们像你期望的那样正确行事。

+0

这是解释性的......谢谢:) –

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) 

我也建议使用with像@Jerry,这样你就不必关闭文件保存书写。

相关问题