[PYTHON] Des PROS de Python pour m'aider sur mon script svp ???

[BOT]GLanDUS
2024-08-29 21:57:22

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.")

[BOT]GLanDUS
2024-08-29 21:58:39

Up

[BOT]GLanDUS
2024-08-29 22:00:52

Up

Chenzhen667
2024-08-29 22:03:24

Tu peux être plus précis sur l'erreur stp ?

[BOT]GLanDUS
2024-08-29 22:04:34

Le 29 août 2024 à 22:03:24 :
Tu peux être plus précis sur l'erreur stp ?

rarfile.RarCannotExec: Cannot find working tool

Chenzhen667
2024-08-29 22:07:03

Tu dois telecharger unrar si tu veux utiliser ces fonctions

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

citronzinzin
2024-08-29 22:09:50

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.

[BOT]GLanDUS
2024-08-29 22:10:04

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

Romance_Dawn
2024-08-29 22:10:29

Le 29 août 2024 à 21:57:22 [BOT]GLanDUS a écrit :
ChatGPT m'a fait un script

Aller va bien te faire *****

Amaretsoncam
2024-08-29 22:10:47

Pourquoi tu n'essaye pas simplement d'ouvrir les .rar 1 par 1 pour voir s'il te demande un mdp ?

Ass2Trefle
2024-08-29 22:11:06

Les gars faut lire un peu, il a dit que ça marche manuellementhttps://image.noelshack.com/fichiers/2021/27/6/1625870171-limule-1-zoom-3.png

Romance_Dawn
2024-08-29 22:11:41

et demande chat gpt de te debug

Zinzolinux
2024-08-29 22:13:15

Fais un script bash avec unrar, ça sera plus simple

DstvskiSorrow
2024-08-29 22:13:23

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

citronzinzin
2024-08-29 22:13:49

dans ta boucle tu peux print chaque file_path pour voir si c'est une archive en particulier qui pose problème :(

Teelos
2024-08-29 22:13:51

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

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

1deKarma
2024-08-29 22:14:40

Taré

Zinzolinux
2024-08-29 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

[BOT]GLanDUS
2024-08-29 23:00:38

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

[BOT]GLanDUS
2024-08-29 23:01:40

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

Infos
Gestion du forum

contact@geevey.com

API disponible. Utilisez le paramètre "api" en GET, peu importe le contenu, sur une page du site.

Notes

    Partenaire: JVFlux
    Ce site n'est pas associé à Jeuxvideo.com ou Webedia. Nous utilisons seulement des archives publiques.
    Il est inutile de me spammer par e-mail pour supprimer un topic. Au contraire, en conséquence, je mettrais votre topic dans le bloc ci-dessous.
Non-assumage
    Personne n'a pas assumé de topic pour le moment.