智能分割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 03:00 编辑
你这思路不对呀,不是应该换个浏览器嘛?
几十GB而已,换个txt文件浏览器,还是可以秒开的嘛,你这切割还得几分钟.... txt文件有40G,怎么会那么大 不错的思路,赞一个 感谢分享 40G的文件,我这老古董估计得分割半小时左右 来学习学习,思路很好。 感谢分享 40G的文本{:1_907:},我电脑打开几百兆的小说都要卡好久 谢谢分享
太大的文本文件可以试试