Python程序属性:错误模块'读者'没有属性' Reader'

时间:2018-06-18 03:47:36

标签: python python-module python-packaging

我试图在C:\ reader \ compressed \中测试运行我的程序,其中我已经创建了两个测试文件' test.gzip'和' test.bz2'但是当我运行Reader类时,我发现模块阅读器没有属性' Reader'。

我打开python到#34;导入阅读器"那么" r = reader.Reader(' test.bz2')" 目录看起来像: enter image description here enter image description here

我可以导入我创建的所有模块。

import reader
import reader.compressed
import reader.compressed.gzipped
import reader.compressed.bzipped

这是我的reader.py:

import os

from reader.compressed import gzipped, bzipped

extension_map = {
    '.bz2': bzipped.opener, 
    '.gz': gzipped.opener,
}

class Reader:
def __init__(self, filename):
    extension = os.path.splitext(filename)[1]
    opener = extension_map.get(extension, open)
    self.f = opener(filename, 'rt')

    def close(self):
        self.f.close()

    def read(self):
        return self.f.read()

我已经检查过我的模块,看看它们是否在那里以及要测试的新文件应该返回消息。

>>> import reader
>>> r= reader.reader.Reader('test.gz')
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: module 'reader' has no attribute 'reader'

Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "C:\Develop\Python\reader\__init__.py", line 13, in 
 __init__
 self.f = opener(filename, 'rt') 
 File"C:\Python\Python36\lib\gzip.py", line 53, in open
binary_file = GzipFile(filename, gz_mode, compresslevel)
File  
 "C:\Programs\Python\Python36\lib\gzip.py", line 163, in 
 __init__
fileobj = self.myfileobj = builtins.open(filename, mode or 
'rb')
FileNotFoundError: [Errno 2] No such file or directory: 
'test.gz'

2 个答案:

答案 0 :(得分:1)

Reader类未在顶级reader模块中定义。相反,它在reader.reader中定义,因为顶级reader是一个包。

如果您当前导致错误的代码是:

import reader
r= reader.Reader('test.gzip')

您需要将其更改为使用reader.reader而不只是reader

import reader.reader
r = reader.reader.Reader('test.gzip')

或者,您可以将reader/reader.py的内容移动到reader/__init__.py,因为后一个文件是定义reader包的内容的位置。或者您可以拆分差异,并保留reader.py文件,同时仍然可以在包级别上使用此类,在__init__.py中使用类似的内容(注意我没有测试过这个,有一些来自__init__.py文件的相对导入的奇怪角点案例:

from .reader import Reader

答案 1 :(得分:0)

您的文件名不应与标准模块名称相同。因此,将reader.py重命名为reader1.py左右。