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

OP
[B

[BOT]GLanDUS

il y a 6 mois

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.")
OP
[B

[BOT]GLanDUS

il y a 6 mois

Up

OP
[B

[BOT]GLanDUS

il y a 6 mois

Up

C6

Chenzhen667

il y a 6 mois

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

OP
[B

[BOT]GLanDUS

il y a 6 mois


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

rarfile.RarCannotExec: Cannot find working tool
C6

Chenzhen667

il y a 6 mois

Tu dois telecharger unrar si tu veux utiliser ces fonctions

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

CI

citronzinzin

il y a 6 mois

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.

OP
[B

[BOT]GLanDUS

il y a 6 mois


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

RD

Romance_Dawn

il y a 6 mois

[BOT]GLanDUS a écrit :
ChatGPT m'a fait un script

Aller va bien te faire *****

AM

Amaretsoncam

il y a 6 mois

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

A2

Ass2Trefle

il y a 6 mois

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

RD

Romance_Dawn

il y a 6 mois

et demande chat gpt de te debug

ZI

Zinzolinux

il y a 6 mois

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

DS

DstvskiSorrow

il y a 6 mois

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

CI

citronzinzin

il y a 6 mois

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

TE

Teelos

il y a 6 mois

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

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

1K

1deKarma

il y a 6 mois

Taré

ZI

Zinzolinux

il y a 6 mois

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

OP
[B

[BOT]GLanDUS

il y a 6 mois


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

OP
[B

[BOT]GLanDUS

il y a 6 mois


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

Merci je teste demain