Python自动化小技巧15——读取rar文件中数据文件(无需解压)
创始人
2025-05-29 13:00:44

rar压缩文件用代码读取也需要一些注意事项的,有同学说rar文件解压了再用正常的读取程序不行吗?

可以是可以,但是当数据大到一定程度时,解压可能要几个小时......直接用python把里面的数据读取出来然后存储就行,这个时间就会比解压后再去读取会快很多,而且不需要解压,就不会占用更多的内存空间。


案例背景

有一个文本压缩包,有7个文件夹,每个文件夹里面有上万条对应主题的txt文件:

 我解压过,一个文件夹要解压1个多小时...7个要多久根本顶不住....而且我需要里面的文本做分类数据,但是我也不需要很多,每种1w条就行,现在就读取这个rar文件,把里面的每个文件夹下抽取1w个txt文本,然后存入excel表里面,并且写上对应的标签。


前置准备

需要rarfile 和unrar两个包

pip install rarfile
pip install unrar

还需要一个exe文件,下载链接:

下载:UnRAR.exe
链接: https://pan.baidu.com/s/1St0XHD3wMB8v6CrDsvLK4g
提取码: 9hr5

将 UnRAR.exe,与你写的py或者ipynb文件目放在同一录下,就可以成功运行解压rar文件了。

不加这个可能会读取不全,就是这个txt文件可能有100个字,不加这个exe文件可能只读取了10个字.....而且可能报错:

raise BadRarFile("Failed the read enough data: req=%d got=%d" % (orig, len(data)))
rarfile.BadRarFile: Failed the read enough data: req=1151 got=52


正式读取

导入包

import rarfile
import os
import pandas as pd

打开这个rar文件,查看前10个文件

rf = rarfile.RarFile("News.rar") # 打开rar文件
rf.namelist()[:10]

查看前两个文件的文字:

for file_name in rf.namelist()[:2]:with rf.open(file_name) as f:print(f.read().decode('utf-8'))

 

 确实是教育主题的文字。

rar里面的文件打开也是open 的方法,然后.read(),再utf-8解码。

获取文件列表

#获取文件列表
folder_files = {}
for info in rf.infolist():path_parts = os.path.split(info.filename)if path_parts[0] not in folder_files:folder_files[path_parts[0]] = []if not path_parts[1]:continuefolder_files[path_parts[0]].append(path_parts[1])

上面会生成一个字典,字典的键就是文件夹的名称,值就是一个列表,装着这个文件夹下面的所有文件名称。

我们可以查看一下有几个文件夹,每个文件夹里面有几个文件:

print(len(folder_files))
for folder, files in folder_files.items():print(f"{folder}文件夹下有{len(files)}文件")

 7个主题没有问题,每个主题的文件个数也是对得上的。

现在我每个文件夹下面只取前1w条就行。

#每类只取前1w个
for folder, files in folder_files.items():folder_files[folder]=files[:10000]

然后查看:

for folder, files in folder_files.items():print(f"{folder}文件夹下有{len(files)}文件")

 文件夹和对应的前1w个文件的名称都准备好了,下面就是循环读取,然后提出来存在df数据框里面。

df=pd.DataFrame(columns=['内容','种类'])
for folder, files in folder_files.items():print(f"{folder}读取中")for file in files:file_names=f'{folder}/{file}'with rf.open(file_names) as f:     df=df.append({'内容':f.read().decode('utf-8'),'种类':folder}, ignore_index=True)

最后储存:

df.to_excel('文本.xlsx',index=False)

 同名目录就会多出一个excel文件,查看:

 

 

 总共7w条,整合好了,后面再用这个数据就很方便。

相关内容

热门资讯

独家讲解.红心自由麻将能不能开... 独家讲解.红心自由麻将能不能开挂.其实是有挂!:https://www.caiding5.cn/ne...
热点推荐“ 舜友棋牌 要怎么开... 您好:舜友棋牌这款游戏可以开挂,确实是有挂的,需要软件加微信【2278274】很多玩家在这款游戏中打...
实测数据“乐酷副厅究竟是不是有... 亲:乐酷副厅这款游戏是可以开挂的,确实是有挂的,添加客服【3671900】很多玩家在这款游戏中怀疑是...
今日重大通报“新皇豪互娱斗牛有... 您好:新皇豪互娱斗牛这款游戏可以开挂,确实是有挂的,需要软件加微信【4194432】,很多玩家在新皇...
实测攻略「花花生活圈」挂辅助工... 您好:花花生活圈这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9307068】很多玩家在这款游...