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

57 篇文章 5 订阅

系列文章目录

前言

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

一、python拆分大文本文件

拆分结果如下:
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

1.原因排查

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

在这里插入图片描述
在这里插入图片描述

2.问题解决

打开文件另存为,编码方式选择UTF-8;在这里插入图片描述

三、拆分源码二

#!/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')


总结

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

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若竹之心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值