标签:exists 切割 makedirs error hang pen 名称 init []
昨天遇到了一个需求,需要将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
标签:exists 切割 makedirs error hang pen 名称 init []
原文地址:http://www.cnblogs.com/tianxiaozz/p/7219722.html