[PYTHON] Des PROS de Python pour m'aider sur mon script svp ???
- 1
ChatGPT m'a fait un script qui doit chercher tous mes fichiers .rar et pour chacun d'entre eux me dire s'il est protégé par un mot de passe ou non.
Sauf que ça marche pas, il me sort une erreur au moment d'appeler la fonction rf.testrar.
Pourtant si j'appelle la fonction manuellement sur un fichier rar ça marche. C'est quand j'appelle la fonction via la boucle et la fonction check_passord_protected que ça merde.
import os
import rarfile
# Chemin du répertoire à analyser
directory = "D:\\"
# Extension de fichier
extension = ".rar"
# Fonction pour vérifier si un fichier .rar est protégé par mot de passe
def check_password_protected(file_path):
try:
with rarfile.RarFile(file_path) as rf:
rf.testrar() # Test du fichier, cela lèvera une exception si le fichier est protégé
print(f"Le fichier {file_path} est ok")
return False # Pas de mot de passe
except rarfile.BadRarFile:
print(f"Le fichier {file_path} est corrompu.")
except rarfile.PasswordRequired:
return True # Mot de passe requis
# Analyse du répertoire
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith(extension):
file_path = os.path.join(root, file)
if check_password_protected(file_path):
print(f"Le fichier {file_path} est protégé par un mot de passe.")
Le 29 août 2024 à 22:03:24 :
Tu peux être plus précis sur l'erreur stp ?
rarfile.RarCannotExec: Cannot find working tool
Tu dois telecharger unrar si tu veux utiliser ces fonctions
Cette erreur indique que le module `rarfile` ne peut pas trouver un outil fonctionnel pour traiter les fichiers RAR. Le module `rarfile` dépend d'un outil externe pour manipuler les fichiers RAR, généralement `unrar` ou `rar`. Voici quelques étapes pour résoudre ce problème :
1. Installez l'outil UnRAR :
- Sur Windows, téléchargez et installez WinRAR depuis le site officiel (https://www.rarlab.com/).
- Sur Linux, vous pouvez installer unrar avec `sudo apt-get install unrar` (pour Debian/Ubuntu) ou l'équivalent pour votre distribution.
- Sur macOS, vous pouvez utiliser Homebrew : `brew install unrar`.
2. Assurez-vous que l'outil UnRAR est dans votre PATH système :
- Sur Windows, ajoutez le chemin d'installation de WinRAR (par exemple, `C:\Program Files\WinRAR`) à votre variable d'environnement PATH.
3. Spécifiez explicitement le chemin de l'outil UnRAR dans votre script. Vous pouvez ajouter ces lignes au début de votre script, juste après les imports :
```python
import rarfile
rarfile.UNRAR_TOOL = "chemin/vers/unrar.exe" # Sur Windows
# ou
rarfile.UNRAR_TOOL = "/usr/bin/unrar" # Sur Linux/macOS
```
Remplacez "chemin/vers/unrar.exe" par le chemin réel de l'exécutable unrar sur votre système.
4. Si vous utilisez Python 3.8 ou une version ultérieure sur Windows, vous pouvez essayer d'utiliser la bibliothèque `zipfile` intégrée pour gérer les fichiers RAR. Voici comment modifier votre fonction `check_password_protected` :
```python
import zipfile
def check_password_protected(file_path):
try:
with zipfile.ZipFile(file_path) as zf:
zf.testzip()
print(f"Le fichier {file_path} est ok")
return False
except RuntimeError as e:
if "encrypted" in str(e).lower():
return True
else:
print(f"Le fichier {file_path} est corrompu.")
except zipfile.BadZipFile:
print(f"Le fichier {file_path} est corrompu.")
return False
```
Cette approche ne nécessite pas d'outil externe, mais elle pourrait ne pas fonctionner pour tous les types de fichiers RAR.
Si ces solutions ne fonctionnent pas, vous pouvez envisager d'utiliser une autre bibliothèque comme `py7zr` qui gère plusieurs formats d'archive, y compris RAR, sans dépendre d'outils externes.
Le 29 août 2024 à 22:07:03 :
Tu dois telecharger unrar si tu veux utiliser ces fonctions
J'ai un UnRar.exe dans le répertoire de WinRAR, je l'ai même ajouté aux variables d'environnement.
De plus comme je l'ai dit, si j'appelle la fonction simplement avec un chemin de fichier en paramètre ça fonctionne, c'est dans le script avec la boucle d'appel que ça merde
Le 29 août 2024 à 21:57:22 [BOT]GLanDUS a écrit :
ChatGPT m'a fait un script
Aller va bien te faire *****
Un truc comme ça l'op :
for archive in $(ls *.rar); do
unrar vt -p- ${archive} > /dev/null 2>&1 &&
echo "${archive} : OK" ||
echo "${archive} : Encrypted"
done
Le 29 août 2024 à 22:10:47 :
Pourquoi tu n'essaye pas simplement d'ouvrir les .rar 1 par 1 pour voir s'il te demande un mdp ?
Je dois tester tous mes rar de mon pc impossible à faire manuellement
Le 29 août 2024 à 22:13:15 :
Fais un script bash avec unrar, ça sera plus simple
Le 29 août 2024 à 22:20:27 :
Un truc comme ça l'op :for archive in $(ls *.rar); do
unrar vt -p- ${archive} > /dev/null 2>&1 &&
echo "${archive} : OK" ||
echo "${archive} : Encrypted"
done
Merci je teste demain
- 1
Données du topic
- Auteur
- [BOT]GLanDUS
- Date de création
- 29 août 2024 à 21:57:22
- Nb. messages archivés
- 20
- Nb. messages JVC
- 20