访问日志文件并返回/打开所有用th编写的文件

2024-04-18 08:25:02 发布

您现在位置:Python中文网/ 问答频道 /正文

For Reference

我有一个python类,它应该解压一个归档文件,递归地迭代目录结构,然后返回文件以进行进一步处理。在我的情况下,我想散列这些文件。我正在努力归还文件。这是我的照片。 我创建了一个解压函数,该函数创建一个日志文件,其中包含解压文件的所有路径。然后我想访问这个日志文件并返回所有文件,这样我就可以在另一个python类中使用它们进行进一步的处理

日志文件的结构:

/home/usr/Downloads/outdir/XXX.log
/home/usr/Downloads/outdir/Code/XXX.py
/home/usr/Downloads/outdir/Code/XXX.py
/home/usr/Downloads/outdir/Code/XXX.py

兴趣代码:

@staticmethod
def read_received_files(from_log):
    with open(from_log, 'r') as data:
        data = data.readlines()
        for lines in data: 
            \\ This does not seem to work zet
            read_files = open(lines.strip())
            return read_files 

Tags: 文件函数frompyloghomereaddata
2条回答

我相信这就是你想要的:

@staticmethod
def read_received_files(from_log):
    files = []
    with open(from_log, 'r') as data:
        for line in data:
            files.append(open(line.strip()))

    return files

您在迭代时返回,阻止打开其他文件

由于您主要关注zip文件中存储的文件的元数据和散列,而不是文件本身,因此无需将文件解压缩到文件系统

相反,您可以使用ZipFile.open()方法通过类似文件的对象访问文件的内容。可以使用每个文件的ZipInfo对象收集元数据。下面是一个示例,它获取文件名和文件大小作为元数据,以及文件的哈希值

import hashlib
import zipfile
from collections import namedtuple

def get_files(archive):
    FileInfo = namedtuple('FileInfo', ('filename', 'size', 'hash'))
    with zipfile.ZipFile(archive) as zf:
        for info in zf.infolist():
            if not info.filename.endswith('/'):  # exclude directories
                f = zf.open(info)
                hash_ = hashlib.md5(f.read()).hexdigest()
                yield FileInfo(info.filename, info.file_size, hash_)

for f in get_files('some_file.zip'):
    print('{}: {} {} bytes'.format(f.hash, f.filename, f.size))

相关问题 更多 >