需要帮助裁剪一个大的文本文件到多个小的文本文件与头部

2024-04-20 10:42:04 发布

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

我需要裁剪一个包含10000多行数字的大文本文件,以及一个具有以下格式的标题(number\u of \u lines,number\u difference,“Sam”)

数字之差是第一个数字和最后一个数字之间的差。你知道吗

例如,如果文件如下所示:

10
12
13.5
17
20

那么,标题应该是: 5.10萨姆

问题是标记不适用于多次不写入头文件,并且大文件的头文件会传递到第一个小文件。你知道吗

每个文件的标题永远不会相同。你知道吗

如何为每个文件添加一个不断变化的头文件?你知道吗

def TextCropper():


lines_per_file = 1000
smallfile = None
with open(inputFileName) as bigfile:
    for lineno, line in enumerate(bigfile):
            if lineno % lines_per_file == 0:
                if smallfile:
                    smallfile.close()
                    small_filename = 'small_file_{}.txt'.format(lineno + lines_per_file)
                    smallfile = open(small_filename, "w")
                    if (flags[counter] == False):
                        smallfile.write(lines_per_file)
                        flags[counter] = True
                    smallfile.write(line)
            elif smallfile:
                smallfile.close()

文本裁剪器()


Tags: 文件标题numberif头文件line数字open
1条回答
网友
1楼 · 发布于 2024-04-20 10:42:04

你一次读一行写一行,效率很低。这样做,你也不知道最后一行是什么,所以你不能提前写你的头。你知道吗

只要读N行,如果有的话。islice()会帮你做到的。如果列表返回为空,则没有要读取的行,否则可以继续将当前块写入文件。你知道吗

因为每一行都被读取为一个带有尾随换行符('\n')的数字,所以去掉它,将第一个和最后一个数字转换为浮点数并计算差值。通过连接列表中的元素,将实际数字写入文件非常简单。你知道吗

要使函数可重用,请将可能更改的变量作为参数包含在内。这样,您就可以命名任何大文件、任何输出小文件和任意数量的行,而无需更改硬编码值。你知道吗

from itertools import islice

def number_difference(iterable):
    return float(iterable[-1].strip('\n')) - float(iterable[0].strip('\n'))

def file_crop(big_fname, chunk_fname, no_lines):
    with open(big_fname, 'r') as big_file:
        ifile = 0
        while True:
            data = list(islice(big_file, no_lines))
            if not data:
                break
            with open('{}_{}.txt'.format(chunk_fname, ifile), 'w') as small_file:
                small_file.write('{} {} Sam\n'.format(len(data), number_difference(data)))
                small_file.write(''.join(data))
            ifile += 1

相关问题 更多 >