【问题标题】:How to split file into number of output files in Python 3?如何在 Python 3 中将文件拆分为多个输出文件?
【发布时间】:2015-06-01 11:27:30
【问题描述】:

我有一个问题陈述:

拆分文件(文件名、文件数)

一个 13 行的文件,分成 3 行,如果不能均匀分布,则输出文件的长度将是 4、4 和 5。 (如果不能均匀分布,差异不能大于1行)

我开始学习 python,我必须创建一个函数,将文件拆分为参数中指定的较小文件。

我遇到的问题是我不知道如何处理这种情况,因为它是基于文件数的,并且差异大于 1 的概念是不允许的。

【问题讨论】:

  • 你好 Reks,欢迎来到 Stack Overflow。请考虑花时间阅读tour 页面和How to Ask——因为您的问题只是一个问题陈述,并没有显示您面临的具体问题。要求 SO 编写 所有代码 不适合作为问题。展示您尝试解决问题的方法,并清楚地描述您面临的具体问题。
  • 查看 os.stat() 的文件大小和 file.readlines([sizehint])。这些用于阅读用于该程序的各种信息。我想你知道如何做写作部分
  • 问题陈述有一些笨拙的措辞。括号中的最后一部分只是说,如果您将总行数(来自文件)分成 x 个组。如果任何组之间的大小差异大于 1,则您的行没有被平均分配。

标签: python file split


【解决方案1】:

问题的本质(据我了解)是如何确定每个输出文件将包含的行数。这是我为 Python 3.4.3 提出的:

def get_line_counts(total_lines, number_of_files):
    base_size = total_lines // number_of_files
    line_count_list = [base_size for i in range(number_of_files)]
    files_with_an_extra_line = total_lines % number_of_files
    for i in range(files_with_an_extra_line):
        line_count_list[len(line_count_list) - (i + 1)] += 1
    return line_count_list


for i, n in enumerate(get_line_counts(13, 3)):
    print("file {0} will contain {1} line(s)".format(i, n))

导致

file 0 will contain 4 line(s)
file 1 will contain 4 line(s)
file 2 will contain 5 line(s)

其余代码只是基本的文件 I/O:从输入文本文件中读取 n 行并将它们写入输出文本文件。

【讨论】:

  • 感谢它帮了大忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
相关资源
最近更新 更多