Sélectionnez plusieurs fichiers avec l'explorateur Windows

Fermé
Philippe1234 - 20 juil. 2020 à 15:39
 Philippe1234 - 21 juil. 2020 à 09:11
Bonjour,

J'utilise un script qui me permet de sélectionner un dossier, puis un fichier et de concaténer le nom du dossier et du fichier pour réutiliser l'ensemble.

Le soucis, c'est que pour un fichier avec la fonction
.askopenfilename()
cela fonctionne très bien mais avec la fonction
.askopenfilenames()
j'ai une erreur :
  
File "C:/Users/PycharmProjects/HarmonizationScipt/test36.py", line 11, in <module>
    file_path = os.path.join(current_directory,select_file)
  File "C:\Users\Anaconda3\lib\ntpath.py", line 115, in join
    genericpath._check_arg_types('join', path, *paths)
  File "C:\Users\Anaconda3\lib\genericpath.py", line 153, in _check_arg_types
    (funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'tuple'


Voici mon code Python :
from tkinter import Tk
from tkinter import filedialog
import os

root = Tk()
root.withdraw()

current_directory = filedialog.askdirectory()
select_file = filedialog.askopenfilenames()

file_path = os.path.join(current_directory,select_file)
print(file_path)


Merci pour votre aide.

Configuration: Windows / Chrome 80.0.3987.132
A voir également:

2 réponses

hugobldl Messages postés 9 Date d'inscription vendredi 17 juillet 2020 Statut Membre Dernière intervention 22 juillet 2020
20 juil. 2020 à 16:31
Hello,

La raison pour laquelle tu as une erreur est que la fonction
.askopenfilenames()
renvoie ce qu'on appel un tulpe ce qui en très gros est une liste (cf: https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python/232026-creez-des-listes-et-des-tuples-1-2)

Pour résoudre cette erreur tu as juste a transformer ton tulpe en string :
file_path = os.path.join(current_directory,str(select_file))

Cependant cela va laisser les parenthèses et les guillemets apparent, tu peux si tu veux les enlever utiliser la fonction
.replace()
(cf: https://www.programiz.com/python-programming/methods/string/replace)

Bon courage :)
0
Philippe1234
21 juil. 2020 à 09:11
Bonjour @hugobldl et merci pour ta réponse,

Tu as vu juste il faut que je remplace les "" et les () pour récupérer le nom du fichier simple.

Bonne journée,
0