我在使用 Python 的 re 模块创建类的实例时遇到问题。这是我正在尝试做的事情:
- 循环遍历许多数据文件的每一行。
- 如果一行与记录的格式匹配,则使用记录的两个值作为属性创建 Record 类的实例。
re
我希望下面的代码片段打印模块在 Record 类的方法中捕获的五个大写字母的字符串terminal()
,但显然我误解了一些东西。实际输出如下代码。
class SrcFile:
def __init__(self, which):
self.name = which
class Record(SrcFile):
def terminal(self):
recordline = re.compile(r"^([A-Z]{5})\s{3}")
if recordline.match(self):
m = recordline.match(self)
return m.group(1)
for f in files:
file = SrcFile(f)
for l in f:
record = Record(f)
print(record.terminal())
同样,我希望每条记录行看到一串五个大写字母,但我实际得到的是:
Traceback (most recent call last):
File "./next.py", line 78, in <module>
print(record.terminal())
File "./next.py", line 63, in terminal
if recordline.match(self):
TypeError: expected string or buffer
如果有人可以在代码中解释原因,那也会很有帮助
for f in files:
file = SrcFile(f)
for l in f:
record = Record(f)
使用显然是不正确的record = Record(file)
。我通过反复试验发现了这一点,因为我无法使用带有错误代码的 record.method() 访问文件的 SrcFile 类的方法,但我不明白为什么。
我敢肯定,我对一般编程尤其是 Python 的缺乏经验是相当明显的。在此先感谢您的帮助。