Construire le chemin d'accès complet nom de fichier en Python
J'ai besoin de passer un fichier de nom de chemin d'accès à un module. Comment puis-je construire le chemin d'accès au fichier à partir d'un nom de dossier, nom de fichier de base, et un format de fichier de chaîne?
Le répertoire peut ou peut ne pas exister à l'heure de l'appel.
Par exemple:
dir_name='/home/me/dev/my_reports'
base_filename='daily_report'
format = 'pdf'
J'ai besoin de créer une chaîne '/home/me/dev/my_reports/daily_report.pdf'
Concaténant les morceaux manuellement ne semble pas être une bonne façon. J'ai essayé os.path.join
:
join(dir_name,base_filename,format)
mais il donne
/home/me/dev/my_reports/daily_report/pdf
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne bien:
Gardez à l'esprit que
os.path.join()
n'existe que parce que les différents systèmes d'exploitation utilisent différentes chemin des caractères de séparation. Il adoucit au cours de cette différence afin de croix-plate-forme de code n'a pas à être encombré avec des cas particuliers pour chaque OS. Il n'est pas nécessaire de le faire pour le nom de fichier "extensions" (voir note de bas de page), parce qu'ils sont toujours connectés au reste du nom par un point de caractère, sur tous les OS.Si l'aide d'une fonction, de toute façon vous fait vous sentir mieux (et vous aimez inutilement compliquer votre code), vous pouvez le faire:
Si vous préférez garder votre code propre, il suffit d'inclure le point dans le suffixe:
Note de bas de page: Il n'y a pas une telle chose comme un "nom du fichier d'extension" à la non-Microsoft systèmes d'exploitation. Sa présence sur Windows est fourni à partir de MS-DOS et de la GRAISSE, qui l'a emprunté CP/M, qui a été mort depuis des décennies. Que dot de plus de trois lettres que beaucoup d'entre nous sont habitués à voir c'est juste une partie du nom de fichier sur tous les autres OS modernes, où il n'a pas de sens.
.
. Pour cela on peut utiliseros.extsep
.os.path.join(dir_name, base_filename, os.extsep, extension)
. Votre réponse est tout à fait correct.+
entre le nom de fichier des pièces.os.path.join()
ajoute spécifiques aux systèmes d'exploitation des séparateurs de chemin(/
par exemple) entre les arguments (comme @səɹoɈ correctement les avoir dans sa réponse. Ainsi, la forme correcte de votre extrait de code est:os.path.join(dir_name, base_filename + os.extsep + extension)
Si vous êtes assez chanceux pour être en cours d'exécution Python 3.4+, vous pouvez utiliser
pathlib
:with_suffix()
va le remplacer au lieu d'ajouter. Vous voulez quelque chose commePath(dirname, filename2 + suffix)
De messagerie unifiée, pourquoi ne pas simplement:
Suffit d'utiliser
os.chemin d'accès.join
à rejoindre votre chemin avec le nom de fichier et l'extension. Utilisationsys.argv
pour accéder à des arguments passés au script lors de l'exécution d'elle:Suffit d'exécuter le script comme: