想把风吹灭的火 发表于 2023-2-1 00:58

智能分割TXT大文件

有些太大的TXT文本电脑无法一下全部打开,使用程序对文本导入数据库的话又是单线程的导入,速度比较慢,所以分割一下,使用多线程,速度应该会比较快点。
CMD的命令自带的有分割命令,不过对于TXT文本内的数据无法准确的断点,这样导致我们多线程导入数据的时候。会出错只能舍弃一些数据。
所以我想,可不可以指定一个大小,使用python,让程序在此基础上,往后找到合适的断点位置,这里我使用的是换行符。
if __name__ == "__main__":
    path="E:\\download\\测试数据.txt"
    with open(path,"rb") as fp:
      # 设置分割的大小,单位k
      size=300
      size=size*1024
      # 开始位置
      start=0
      # 读取的最终位置
      end=0
      # 计数器
      i=1
      byte=b"0"
      while byte!=b"":
            # 设置指针位置,主要是为了查找指针后面\n的位置,这个操作简称为“寻值”
            fp.seek(end+size,0)
            byte=fp.read(1)
            i+=1
            # 寻值
            while byte!=b"\n" and byte!=b"":
                byte=fp.read(1)
            end=fp.tell()
            # 存入文件
            with open("E:\\download\\a\\1\\"+str(i*1)+".txt","wb") as fp1:
                fp.seek(start,0)
                fp1.write(fp.read(end-start))
                start=end
      

分割后的数据,可以使用CMD命令“type ./*.txt >> ./11.txt”进行合并,我生成了一份测试TXT文本,使用这段代码进行了分割,最后再进行,合并,导入到EXCEL软件中,进行数据的对比,最终得到的结果,无数据丢失。
本来,我还想写多线程导入数据库来着的,不过这段代码我有已经看不懂了,处于玄学状态,测试的是没问题,不过不保证真的不出问题。
个人测试一个40G的文本,分割成1G的单文本(分割2G会报错,我也不知道为啥),总共需要约4分钟。
如果再使用多线程直接导入数据的话,相信速度就会快起来了。
PS:测试文本的数据是我用EXCEL直接生成的,不是啥机密数据

零下八度 发表于 2023-2-1 02:57

本帖最后由 零下八度 于 2023-2-1 03:00 编辑

你这思路不对呀,不是应该换个浏览器嘛?

几十GB而已,换个txt文件浏览器,还是可以秒开的嘛,你这切割还得几分钟....

sqemail 发表于 2023-2-1 07:33

txt文件有40G,怎么会那么大

tek2y 发表于 2023-2-1 02:44

不错的思路,赞一个

zhangting2022 发表于 2023-2-1 06:07

感谢分享

wdz2018 发表于 2023-2-1 06:18

40G的文件,我这老古董估计得分割半小时左右

tanglikecuan 发表于 2023-2-1 07:40

来学习学习,思路很好。

xiaoxiaohh 发表于 2023-2-1 08:03

感谢分享

CrazyLife 发表于 2023-2-1 08:10

40G的文本{:1_907:},我电脑打开几百兆的小说都要卡好久

宜城小站 发表于 2023-2-1 08:26

谢谢分享
太大的文本文件可以试试
页: [1] 2 3 4
查看完整版本: 智能分割TXT大文件