質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

2023閲覧

拡張子が.exeになっている.rarファイルを名前を.rarにして解凍する方法

mikumikuDM

総合スコア83

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2022/03/28 18:10

編集2022/03/29 13:58

前提

パソコンのフォルダの中にあるたくさんのファイルをすべて解凍するためのソースコードを作成中です、そのソースコードの作成のために
以下の画像のファイルを解凍するためのソースコードを作成しています。

イメージ説明

画像のファイルを解凍するためのソースコードをどのように書けばいいかが今回の質問です。

実現したいこと

.part1.exeから.part4.rarの4つのファイルを使用してRJ0000を解凍したいです。
しかし、以下のソースコードでは正常に解凍することはできませんでした。

該当のソースコード

python

1import rarfile 2rarfile.UNRAR_TOOL = r"D:\UnRAR.exe" 3filename = r"D:\解凍用\RJ0000.part1.exe" 4foldername = r"D:\解凍用" 5rf = rarfile.RarFile(filename) 6rf.extractall(foldername)

filename = r"D:\解凍用\RJ0000.part1.exe"を
filename = r"D:\解凍用\RJ0000.part1.rar"に変えても結果は同じです。(元のファイルの名前はもちろん変えてから試してあります)

このソースコードではもともと.rarだったファイルは問題なく解凍できたことが確認できています(.part1.rarと.part2.rarがあるファイルでも試しています)

発生している問題・エラーメッセージ

例外が発生しました: BadRarFile (note: full exception trace is shown but execution is paused at: <module>) Failed the read enough data: req=258027 got=0 File "C:\Users\hatun\Desktop\pythontest\テスト用.py", line 6, in <module> (Current frame) rf.extractall(foldername)

試したこと

エラーメッセージが出たあとに出力されているファイルを確認したところ、.part1のファイルしか解凍がされていませんでした。
このソースコードではもともと.rarだったファイルは問題なく解凍できたことが確認できています(.part1.rarと.part2.rarがあるファイルでも試していて、
その結果、.part1.rarと.part2.rarのファイルが解凍できていることを確認しています。)

参考にしたページ

https://code-examples.net/ja/q/34a8e7
https://ky-orihara.hatenablog.com/entry/2019/02/19/022738

補足

画像のファイルを解凍する際に.part1.exeを実行するとことで問題なく解凍できていること、
7-Zipで.part1.exeを解凍すると問題なく解凍できること(.part2.rar以降も解凍できている)を確認しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/03/28 22:13

exe は実効ファイルで、実行することにより解凍できます。どのソフトのどのバージョンを使って作られたかによって形式は違います。実行するのが最も簡単だと思います。
CHERRY

2022/03/28 22:13

WinRAR や unrar コマンド等で、名前を変えたファイルを解凍できますか?
mikumikuDM

2022/03/29 08:05

Zuishin様、ご指摘ありがとうございます。今回の場合ですと.part1.exe自体の解凍には成功していているため、import rarfileを使用すれば解凍自体はできそうだと思っています。 CHERRY様、WinRARについては.part.exeを実行した際にWinRAR自動解凍書庫が起動して解凍することができます。unrar コマンドでの解凍はやったことがないのですが、import pyunpack を使用した場合は解凍ができませんでした、エラーメッセージpatool can not unpack(.exeファイルと.rarファイルの両方の形式で確認しました)
guest

回答1

0

自己解決

from subprocess import run, DEVNULLと
7z.exeを使用することで解凍することができました

python

1from pathlib import Path 2from subprocess import run, DEVNULL 3 4print('start') 5 6exe_file = r"C:\Program Files\7-Zip\7z.exe" 7 8xExtract_file = r"D:\解凍用\RJ0000.part1.exe" # 解凍対象のファイル 9 10Zip_dir = r"D:\解凍用" # 解凍後のフォルダ 11 12oZip_dir = '-o' + str(xExtract_file[:-4]) 13 14args = ( 15 exe_file, # 7z.exe 16 'x', # xExtract 解凍のコマンド 17 xExtract_file, # 解凍対象のファイル 18 oZip_dir, # 解凍後のフォルダ 19 '-y' # すべてyesのコマンド、自動的に上書きされる 20 ) 21 22cp = run(args, stdout=DEVNULL) 23 24if cp.returncode != 0: 25 print(f'error {cp.returncode}') 26 27print('デバッグ') 28print(exe_file) 29print(xExtract_file) 30print(oZip_dir) 31print(f'(cp.returncode) {cp.returncode}') 32 33# (終了) 34print('end') 35 36# 参考 https://srbrnote.work/archives/4747

参考にしたページ

https://srbrnote.work/archives/4747

投稿2022/03/29 18:42

mikumikuDM

総合スコア83

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問