將txt文檔按行分割

昨天遇到了一個需求,須要將txt文檔按行分割,並指定了行數,python

最近在用python,就在網上搜了一下,在參考了http://blog.csdn.net/zhang_red/article/details/9055965這個帖子後,準備本身改一下linux

發現原帖代碼彷佛有點問題,改了下代碼以下:app

# -*- 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行,進行分割,達到了預期目標。spa

就在我打算寫個博客記錄時,發現了更好用的東東,命令行.net

linux或osx可用,命令行

命令行code

wc -l 目標文本.txtblog

用來統計文本共有多少行utf-8

split -l 100000 目標文本.txt 目標文本part 文檔

將目標文本切割  每100000一個文件  文件前綴名爲目標文本part

相關文章
相關標籤/搜索