为什么Python的re模块不能用这种方法工作?

为什么Python的re模块不能用这种方法工作?,python,class,methods,Python,Class,Methods,我在使用Python的re模块创建类实例时遇到问题。以下是我想做的: 在多个数据文件的每一行上循环。 如果一行与记录的格式匹配,则使用记录的两个值作为属性创建记录类的实例。 我希望下面的代码片段打印Record类的terminal方法中re模块捕获的五个大写字母的字符串,但显然我误解了什么。实际输出如下代码所示 class SrcFile: def __init__(self, which): self.name = which

我在使用Python的re模块创建类实例时遇到问题。以下是我想做的:

在多个数据文件的每一行上循环。 如果一行与记录的格式匹配,则使用记录的两个值作为属性创建记录类的实例。 我希望下面的代码片段打印Record类的terminal方法中re模块捕获的五个大写字母的字符串,但显然我误解了什么。实际输出如下代码所示

    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
使用record=Recordfile显然是不正确的。我通过反复试验发现了这一点,因为我无法使用错误代码的record.method访问文件的SrcFile类的方法,但我不明白为什么

我确信,我在编程方面的一般经验,尤其是Python方面的经验是相当明显的。提前谢谢你的帮助。

你是想写信吗

if recordline.match(self.name):
而不是

if recordline.match(self):
调用re.match时,应该使用字符串。self不是字符串,而是记录对象,而self.name是行中设置的字符串

          self.name = which
还有两个与你的另一个问题相关的基本问题

你永远不会使用行本身,l,这就是你遍历文件的全部原因。也许你是想写记录

为什么Record类用代码类RecordSourceFile继承SourceFile对象?您应该更仔细地阅读:继承用于在多个对象之间共享方法和属性,但它实际上并不适用于此代码

你的意思是写

if recordline.match(self.name):
而不是

if recordline.match(self):
调用re.match时,应该使用字符串。self不是字符串,而是记录对象,而self.name是行中设置的字符串

          self.name = which
还有两个与你的另一个问题相关的基本问题

你永远不会使用行本身,l,这就是你遍历文件的全部原因。也许你是想写记录

为什么Record类用代码类RecordSourceFile继承SourceFile对象?您应该更仔细地阅读:继承用于在多个对象之间共享方法和属性,但它实际上并不适用于此代码


另外,他没有使用名为file的SrcFile实例。@DavidRobinson,谢谢你指出我的错误;这一天充满了他们!每个人一开始都是初学者!另外,他没有使用名为file的SrcFile实例。@DavidRobinson,谢谢你指出我的错误;这一天充满了他们!每个人一开始都是初学者!