今回、第5回テディカップデータ解析コンテストに参加して、最初の「解凍」という作業に長い間悩まれてきた方も多いと思います!これは私の問題解決プロセスのコードを共有します。
問題を解決する前に、解凍に必要ないくつかのライブラリをインストールする必要があります。インストール方法は次のとおりです。
まず、以下に示すように、メイン ページ ウィンドウで Anaconda を検索し、Anaconda を開きます。
最初の一歩:
ステップ2:
すでにインストールしているため、ここでエラーを報告します。
次のコードを順番に入力します。
pip install zipfile -i https://pypi.tuna.tsinghua.edu.cn/simple
#加上清华镜像源,下载速度更快
pip install py7zr -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install rarfile -i https://pypi.tuna.tsinghua.edu.cn/simple
-i https://pypi.tuna.tsinghua.edu.cn/simple# 清華ミラーソース、
より早くインストールしてください!
インストール後、次のトピックを開始してください。
私のファイルタイプは次のとおりです。
この圧縮ファイルには、次のようなさまざまな種類の圧縮ファイルも含まれています。
解凍後の結果:
完全なコードは次のとおりです。
import os
import zipfile
import py7zr
import rarfile
class UnCompress:#将所有函数封装成一个类,方便调用函数
def __init__(self, file_path, output_path):
self.file_path =file_path # 输入文件路径(这里不需要更改,最后几行代码会输入文件路径)
self.output_path = output_path # 输出文件路径(这里不需要更改,最后几行代码会输入文件路径)
# zip解压缩
def unzip_file(self):
try:
zf = zipfile.ZipFile(file=self.file_path) # zipfile 读取压缩文件对象
zf.extractall(self.output_path) # 压缩文件内全部文件解压到输入的文件夹中
zf.close() # 关闭 zipfile 对象
return True #压缩完后返回的值(如果是批量解压文件的话,就不会返回)
except:
return False#压缩报错后返回的值,如果返回false,则需要修改其他代码,可私信作者
# 7z解压缩
def un7z_file(self):
try:
py = py7zr.SevenZipFile(file=self.file_path) # py7zr 读取压缩文件对象
py.extractall(self.output_path) # 压缩文件内全部文件解压到输入的文件夹中
py.close() # 关闭 py7zr 对象
return True
except:
return False
# RAR解压缩
def unrar_file(self):
try:
zf = rarfile.RarFile(file=self.file_path) # rarfile 读取压缩文件对象
zf.extractall(self.output_path) # 压缩文件内全部文件解压到输入的文件夹中
zf.close() # 关闭 rarfile 对象
return True
except:
return False
def run(self):#封装一个函数,判断读取的文件是属于什么类型的压缩文件,然后调用相应的文件
file_state = False
if not os.path.exists(self.file_path):
return file_state
if not os.path.exists(self.output_path):
os.makedirs(self.output_path)
# zip解压缩
if zipfile.is_zipfile(self.file_path):
file_state = self.unzip_file()
# 7z解压缩
if py7zr.is_7zfile(self.file_path):
file_state = self.un7z_file()
# RAR解压缩
if rarfile.is_rarfile(self.file_path):
file_state = self.unrar_file()
return file_state
# 循环遍历文件夹
# 解压第一层文件夹
w = UnCompress("DataA.rar","DataA")#此处为你们要改的路径,前者为你需要的压缩文件夹路径,后者为你解压过后的文件保存的地址
w.run()
#解压第二层文件夹
path="DataA"#此处为你刚刚解压文件夹过后保存的地址,也是你需要继续解压的多个文件夹
filenames = os.listdir(path)
for filename in filenames:
filepath = os.path.join(path,filename)
newfilepath = filepath.split(".",1)[0]#以压缩文件的前缀为文件名
if os.path.isdir(newfilepath): # 根据获取的压缩文件的文件名建立相应的文件夹
pass
else:
os.mkdir(newfilepath)
w = UnCompress(filepath,newfilepath)
w.run()
rar ファイルを解凍するときに、rarfile.BadRarFile: 十分なデータの読み取りに失敗しました: req=643012 got=52 というエラーが発生する場合があります。必要なのは次のことだけです。
最初のエラーの理由は、pip3 install rarfile コマンドを使用して rarfile パッケージをインストールした後、システム環境変数に unrar.exe を追加しなかったためです。そのため、解決策は 2 つあります。
1. unrar.exe をシステム環境変数に追加します。
2. 以下の図に示すように、unrar.exe をプロジェクトの .py ディレクトリにコピーします。
注: unrar は元々大文字 (UNRAR) ですが、名前を小文字に変更する必要があります。一部のコンピューターでは、これが原因でエラーが報告される場合があります。
!!!あくまで参考ですので、間違いがあればご指摘ください!
権利侵害の場合は作者にご連絡ください。