Topic de [BOT]GLanDUS :

[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.")
Tu peux être plus précis sur l'erreur stp ?

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

https://www.rarlab.com/rar/unrarw64.exe

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

https://www.rarlab.com/rar/unrarw64.exe

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 *****

Pourquoi tu n'essaye pas simplement d'ouvrir les .rar 1 par 1 pour voir s'il te demande un mdp ?
Les gars faut lire un peu, il a dit que ça marche manuellement https://image.noelshack.com/fichiers/2021/27/6/1625870171-limule-1-zoom-3.png
et demande chat gpt de te debug
Fais un script bash avec unrar, ça sera plus simple
Si t'as changé tes variables d'environnement, hésite pas à reboot ton éditeur, des fois ça refresh quand tu lances manuellement une fonction mais pas depuis le script
dans ta boucle tu peux print chaque file_path pour voir si c'est une archive en particulier qui pose problème :(

Et c'est ce ChatGPT qui est censé volé notre taff de dev ?

https://image.noelshack.com/fichiers/2018/13/4/1522325846-jesusopti.png

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
En ligne sur JvArchive 363