2014-03-30 178 views
0

我有這樣的代碼:這段代碼爲什麼會給我一個錯誤?

import re 
with open("text2.txt", "r") as f: 
    content = f.readlines() 
numbers = re.findall(r'\b\d{3}\b', content) 
with open("text3.txt", "w") as f: 
    f.write(str(numbers)) 

運行時,它應該找到所有的三位數,並把它們打印到一個新的文本文件。

當我運行它,我得到這個錯誤:

Traceback (most recent call last): 
    File "C:\Users\Zach\Desktop\test3.py", line 4, in <module> 
    numbers = re.findall(r'\b\d{3}\b', content) 
    File "C:\Panda3D-1.7.2\python\lib\re.py", line 177, in findall 
    return _compile(pattern, flags).findall(string) 
TypeError: expected string or buffer 

我在做什麼錯?

+0

'file.readlines()'返回字符串列表,'re.findall()'需要一個字符串。 – bereal

+0

此外,您正在指定一個列表而不是一個字符串。 – devnull

+0

@devnull indentation在這裏不是問題:文件被讀取然後關閉。 – bereal

回答

4

re.findall需要字符串作爲第二個參數,但文件對象的readlines方法返回的列表。也許你的意思是使用read方法,而不是(它返回一個字符串):

with open("text2.txt", "r") as f: 
    content = f.read() 
+0

這工作得很好。非常感謝你。 –

相關問題