我正在尝试遍历目录中的所有压缩文件并保持其大小。我看到我可以在不提取它的情况下做到这一点,但是当我尝试这样做时,我得到一个错误: “IOError:[Errno 2]没有这样的文件或目录:'first_gz_file。*。gz'” 当我在寻找它时,我可以找到它,所以我不明白为什么我会得到错误。
这是我的代码:
for directories in chosen_dirs:
for root,dir,file in os.walk(directories):
for o in file:
if o.endswith('.gz'):
print (o)
input_file = gzip.open(o, 'rb')
try:
print(input_file.size)
finally:
input_file.close()
它会正确打印o文件(如果我删除它下面的行)
那里出了什么问题? 谢谢
答案 0 :(得分:2)
请勿使用os.path.getsize(path)
至于出了什么问题,快速检查显示gzip对象没有size方法:
>>> g = gzip.open('temp.gz', 'wb')
>>> dir(g)
['__abstractmethods__', '__class__', '__delattr__', '__doc__', '__enter__',
'__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__',
'__metaclass__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_abc_cache',
'_abc_negative_cache', '_abc_negative_cache_version', '_abc_registry',
'_add_read_data', '_checkClosed', '_checkReadable', '_checkSeekable',
'_checkWritable', '_check_closed', '_init_read', '_init_write', '_read',
'_read_eof', '_read_gzip_header', '_unread', '_write_gzip_header', 'close',
'closed', 'detach', 'filename', 'fileno', 'flush', 'isatty', 'max_read_chunk',
'myfileobj', 'next', 'read', 'read1', 'readable', 'readinto', 'readline',
'readlines', 'rewind', 'seek', 'seekable', 'tell', 'truncate', 'writable',
'write', 'writelines']
>>>
我会添加不要使用file
和dir
作为变量名称,因为它们都是python中的保留字,您可能需要在原始上下文中使用它们在您使用它们的上下文中也是列表,因此为了清楚起见,请使用root, dirs, files
或root, dir_list file_list
。