Bonne pratique: travailler avec path en Python


Même problème: liste des dossiers et lecteurs

Dans le dernier article, nous avons utilisé une fonction récursive de moins de 10 lignes pour résoudre le problème de l'analyse des dossiers et du classement des fichiers par date et taille modifiées.





Maintenant, je vais relever la barre et vous montrer comment vous auriez pu faire mieux.





Pathlib

?





:





path_file = os.sep.join([path_dir, filename])
      
      



, , «+» .





, , , .





path_dir: str = r"C:/Users/sselt/Documents/blog_demo/"  # abschließender Trenner
filename: str = "some_file"
path_file = os.sep.join([path_dir, filename])
# C:/Users/sselt/Documents/blog_demo/\some_file
      
      



, , . , , .





Python 3.4 — pathlib



. os - .





, :





import os
path = "C:/Users/sselt/Documents/blog_demo/"
os.path.isdir(path)
os.path.isfile(path)
os.path.getsize(path)
      
      



:





from pathlib import Path
path: Path = Path("C:/Users/sselt/Documents/blog_demo/")
path.is_dir()
path.is_file()
path.stat().st_size
      
      



. ?





-





-, , . , path



, .





:





filename: Path = Path("some_file.txt")
path: Path = Path("C:/Users/sselt/Documents/blog_demo")
print( path / filename )
# C:\Users\sselt\Documents\blog_demo\some_file.txt
      
      



. path



, . 





path



:





filename: Path = Path("some_file.txt")
# hier path mit überflüssigem Trenner am Schluss
path: Path = Path("C:/Users/sselt/Documents/blog_demo/")
# hier path mit doppeltem Trenner
path: Path = Path("C:/Users/sselt/Documents/blog_demo//")
# hier path völlig durcheinander
path: Path = Path("C:\\Users/sselt\\Documents/blog_demo")  # hier ein wilder Mix
# alle Varianten führen zum selben Ergebnis
print(path/filename)
# C:\Users\sselt\Documents\blog_demo\some_file.txt
      
      



, . . generic path



, Windows WindowsPath



, Linux PosixPath







, , . str(Path)



.





os.walk

os.listdir



, os.path.isdir



.





os.walk



. , , . . , .





os.walk Pathlib

, , , , :





filesurvey = []
for row in os.walk(path):   # row beinhaltet jeweils einen Ordnerinhalt
    for filename in row[2]:  # row[2] ist ein tupel aus Dateinamen
        full_path: Path = Path(row[0]) / Path(filename)   # row[0] ist der Ordnerpfad
        filesurvey.append([path, filename, full_path.stat().st_mtime, full_path.stat().st_size])
      
      



, . !





.






«Python Developer. Basic».









- « : map(), filter() zip()».





, , ? , , Python? "callback", "iterator" "lambda". — !












All Articles