python拆分大文本(.txt)文件

系列文章目录

文章目录

前言

提示:以下是本篇文章正文内容,以拆分密码字典为例;

一、python拆分大文本文件

拆分结果如下:
《python拆分大文本(.txt)文件》

1.源码

代码如下(示例):

# -*- coding:utf-8 -*-

from datetime import datetime

def split():
    source_dir =r'E:\py\python3.7\test\test50mimapojie\zipCrack-master\替换文件\密码字典\6.txt'
    target_dir =r'E:\py\python3.7\test\test50mimapojie\zipCrack-master\替换文件\密码字典\zidian'

    # 计数器
    flag = 0
    # 文件名
    name = 1
    # 存放数量
    dataset = []

    print("开始拆分……")
    print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

    # 读取source文件,每1000000行写入到一个新的文件中(可自行设定,由于密码字典行数过多,此处选择100万行为一个文件)
    with open(source_dir,'r',encoding='utf-8') as f_source:
        for line in f_source:
            flag += 1
            dataset.append(line)
            if flag == 1000000:
                with open(target_dir + "target" + str(name) + ".txt",'w+',encoding='utf-8') as f_target:
                    for data in dataset:
                        f_target.write(data)
                name += 1
                flag = 0
                dataset = []

    # 处理最后不到2000行的数据
    with open(target_dir + "target" + str(name) + ".txt",'w+',encoding='utf-8') as f_target:
        for data in dataset:
            f_target.write(data)

    print("拆分完成!")
    print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

def main():
    split()

if __name__ == "__main__":
    main()

二、可能遇到的问题

错误编码:

UnicodeDecodeError: 'gbk' codec can't decode byte 0x85 in position 5716: illegal multibyte sequence
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 933: invalid continuation byte

《python拆分大文本(.txt)文件》
《python拆分大文本(.txt)文件》

1.原因排查

错误的意思是:Unicode的解码出现错误;

《python拆分大文本(.txt)文件》
《python拆分大文本(.txt)文件》

2.问题解决

打开文件另存为,编码方式选择UTF-8;《python拆分大文本(.txt)文件》

三、拆分源码二

#!/usr/bin/python

file_read = '1.txt'

def get_file_list(file_read):
    line_list = []
    with open(file_read,'r',encoding='utf-8') as file_object:
        lines = file_object.readlines()
        for line in lines:
            line = line.strip('\n')
            line_list.append(line)
    return line_list

ret = get_file_list(file_read)

line_number = 10000 #要拆分1个列表多少个元素
diff_match_split = [ret[i:i + line_number] for i in range(0, len(ret),line_number)]#列表推导式,分出小列表

for file_number in range(len(diff_match_split)):#遍历长度
    with open('batch_%d.txt' %(file_number), 'w+') as temp:#根据索引命名文件
        for line in diff_match_split[file_number]:#根据大列表索引遍历小列表写入文件
            temp.write(line+'\n')

总结

分享:
量子力学的平行多宇宙学说,在交叉小径的花园里总会有一条路,让人们在生命中的每一个节点都得到幸福。 在每一次铭心刻骨的选择里,总有一个你选对了路 。在茫茫的恒河沙数的宇宙里,总有一个你,终生幸福。

    原文作者:用余生去守护
    原文地址: https://blog.csdn.net/qq_45365214/article/details/122594548
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞