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? "callback", "iterator" "lambda". — !