Module pywander.file.utils

Functions

def bigfile_read(filename, process_line=None, line_start=1, line_count=-1, mode='r', encoding='utf8')
Expand source code
def bigfile_read(filename, process_line=None, line_start=1, line_count=-1, mode="r", encoding="utf8"):
    """
    选择大型文件部分行执行某些操作

    filename 要处理的文件名
    process_line -- 每一行的处理函数 默认打印动作 默认传入第一个参数 当前行数 第二个参数 具体行内容
    line_start 从哪一行开始处理 默认1
    line_count 总计要处理多少行 默认-1 含义为无穷大
    mode 文件打开模式 默认 'r'
    encoding 文件打开编码 默认 'utf8'

    :return:
    """

    def _default_process_line(line_num, line_content):
        print(f"{line_num}: {line_content}", end='')
        return line_content

    if process_line is None:
        process_line = _default_process_line

    with open(filename, mode=mode, encoding=encoding) as f:
        in_block = False
        count = 0

        for index, line in enumerate(f):
            line_num = index + 1

            if line_num == line_start:
                in_block = True
                print('\n', end='')

            if in_block:
                new_line = process_line(line_num, line)

                count += 1

            if 0 < line_count <= count:
                break

选择大型文件部分行执行某些操作

filename 要处理的文件名 process_line – 每一行的处理函数 默认打印动作 默认传入第一个参数 当前行数 第二个参数 具体行内容 line_start 从哪一行开始处理 默认1 line_count 总计要处理多少行 默认-1 含义为无穷大 mode 文件打开模式 默认 'r' encoding 文件打开编码 默认 'utf8'

:return:

def calculate_file_hash(file_path)
Expand source code
def calculate_file_hash(file_path):
    """
    计算目标文件hash值
    """
    hash_object = hashlib.sha256()
    with open(file_path, 'rb') as file:
        for chunk in iter(lambda: file.read(4096), b""):
            hash_object.update(chunk)
    return hash_object.hexdigest()

计算目标文件hash值

def gen_bigfile_read(filename, process_line=None, line_start=1, line_count=-1, mode='r', encoding='utf8')
Expand source code
def gen_bigfile_read(filename, process_line=None, line_start=1, line_count=-1, mode="r", encoding="utf8"):
    """
    选择大型文件的某些行执行某些操作,并生成出来。

    filename 要处理的文件名
    process_line -- 每一行的处理函数 默认不执行动作 默认传入第一个参数 当前行数 第二个参数 具体行内容
    line_start 从哪一行开始处理 默认1
    line_count 总计要处理多少行 默认-1 含义为无穷大
    mode 文件打开模式 默认 'r'
    encoding 文件打开编码 默认 'utf8'

    :return:

    """

    def _default_process_line(line_num, line_content):
        return line_content

    if process_line is None:
        process_line = _default_process_line

    with open(filename, mode=mode, encoding=encoding) as f:
        in_block = False
        count = 0

        for index, line in enumerate(f):
            line_num = index + 1

            if line_num == line_start:
                in_block = True

            if in_block:
                new_line = process_line(line_num, line)
                yield new_line

                count += 1

            if 0 < line_count <= count:
                break

选择大型文件的某些行执行某些操作,并生成出来。

filename 要处理的文件名 process_line – 每一行的处理函数 默认不执行动作 默认传入第一个参数 当前行数 第二个参数 具体行内容 line_start 从哪一行开始处理 默认1 line_count 总计要处理多少行 默认-1 含义为无穷大 mode 文件打开模式 默认 'r' encoding 文件打开编码 默认 'utf8'

:return: