zoukankan      html  css  js  c++  java
  • 将txt文档按行分割

    昨天遇到了一个需求,需要将txt文档按行分割,并指定了行数,

    最近在用python,就在网上搜了一下,在参考了http://blog.csdn.net/zhang_red/article/details/9055965这个帖子后,准备自己改一下

    发现原帖代码似乎有点问题,改了下代码如下:

    # -*- coding: utf-8 -*-
    import os
    
    
    class SplitFiles():
        """按行分割文件"""
    
        def __init__(self, file_name, line_count=200):
            """初始化要分割的源文件名和分割后的文件行数"""
            self.file_name = file_name
            self.line_count = line_count
    
        def split_file(self):
            if self.file_name and os.path.exists(self.file_name):
                try:
                    with open(self.file_name) as f:  # 使用with读文件
                        temp_count = 0
                        temp_content = []
                        part_num = 1
                        for line in f:
                            if temp_count < self.line_count:
                                temp_count += 1
                            else:
                                self.write_file(part_num, temp_count, temp_content)
                                part_num += 1
                                temp_count = 1
                                temp_content = []
                            temp_content.append(line)
                        else:  # 正常结束循环后将剩余的内容写入新文件中
                            self.write_file(part_num, temp_count, temp_content)
    
                except IOError as err:
                    print(err)
            else:
                print("%s is not a validate file" % self.file_name)
    
        def get_part_file_name(self, part_num, temp_count):
            """"获取分割后的文件名称:在源文件相同目录下建立临时文件夹temp_part_file,然后将分割后的文件放到该路径下"""
            temp_path = os.path.dirname(self.file_name)  # 获取文件的路径(不含文件名)
            temp_name = os.path.splitext(os.path.basename(self.file_name))[0]
            part_file_name = temp_path + os.sep + temp_name
            if not os.path.exists(part_file_name):  # 如果临时目录不存在则创建
                os.makedirs(part_file_name)
            part_file_name += os.sep + temp_name + "_part" + str(part_num) + "_"+ str(temp_count) + ".txt"
            return part_file_name
    
        def write_file(self, part_num, temp_count, *line_content):
            """将按行分割后的内容写入相应的分割文件中"""
            print temp_count
            part_file_name = self.get_part_file_name(part_num, temp_count)
            print(line_content)
            try:
                with open(part_file_name, "w") as part_file:
                    part_file.writelines(line_content[0])
            except IOError as err:
                print(err)
    
    
    if __name__ == "__main__":
        sf = SplitFiles(r"/Users/xxx/目标文档.txt", 100000)
        sf.split_file()

    代码将txt文档每10W行,进行分割,达到了预期目标。

    就在我打算写个博客记录时,发现了更好用的东东,命令行

    linux或osx可用,

    命令行

    wc -l 目标文本.txt

    用来统计文本共有多少行

    split -l 100000 目标文本.txt 目标文本part 

    将目标文本切割  每100000一个文件  文件前缀名为目标文本part

  • 相关阅读:
    Cufon css3@font-face
    HTML5 Canvas
    HTML5 Canvas 的宽高
    :nth-child()
    new Image()
    ios有些机型input和fixed导致的页面错位问题
    使用performance进行前端性能监控
    throttle(节流)和debounce(防抖)
    object-fit/object-position
    flex布局与ellipsis冲突问题
  • 原文地址:https://www.cnblogs.com/tianxiaozz/p/7219722.html
Copyright © 2011-2022 走看看