Chcę się zmienić a.txt
na b.kml
.
python
file-rename
zjm1126
źródło
źródło
C:/folder/file.txt
w Windows lub/home/file.txt
Linux / MacOS).OSError
w systemach Windows.os.path.exists
należy użyć do sprawdzenia, czy cel istnieje przed zmianą nazwy. Powoduje to powstanie błędu „Czas sprawdzenia do czasu użycia”, ale jest mało prawdopodobne, aby powodował problemy. (Nie znam łatwego sposobu na obejście tego - patrz tutaj .os.replace
Plik może znajdować się w katalogu, w takim przypadku określ ścieżkę:
źródło
Działa to w celu zmiany nazwy lub przeniesienia pliku.
źródło
shutil.move
nie jest dobrą opcją, ponieważ nie jest operacją atomową. Jeśli plik jest otwarty, na przykładshutil.move
utworzy pliknew_name
, ale nie usunie go,old_name
pozostawiając dwa pliki.os.rename
z drugiej strony nic nie zrobi, co jest lepszą opcją . Dziękishutil.move
, nawet jeśli złapiesz błąd, nadal będziesz musiał się martwić o sprawdzenie i usunięcie nieuczciwego pliku. Po prostu nie warto, kiedy istnieje lepsze narzędzie:os.rename
.Od wersji Python 3.4 można to rozwiązać za pomocą modułu pathlib .
Jeśli akurat używasz starszej wersji, możesz skorzystać z wersji z backportowaną wersją, którą znajdziesz tutaj
Załóżmy, że nie znajdujesz się w ścieżce katalogu głównego (aby dodać trochę trudności), której nazwę chcesz zmienić, i musisz podać pełną ścieżkę, możemy na to spojrzeć:
Możesz więc obrać ścieżkę i utworzyć
Path
z niej obiekt:Aby dostarczyć trochę informacji o tym obiekcie, który mamy teraz, możemy z niego wyciągnąć różne rzeczy. Na przykład, jeśli z jakiegokolwiek powodu chcemy zmienić nazwę pliku, zmieniając nazwę pliku z
the_file
nathe_file_1
, możemy uzyskać część nazwy pliku:I nadal trzymaj przedłużenie w ręku:
Możemy wykonać naszą modyfikację za pomocą prostej manipulacji ciągiem:
Python 3.6 i nowsze wersje używają f-stringów!
Inaczej:
A teraz możemy wykonać naszą zmianę nazwy, wywołując
rename
metodę na utworzonym obiekcie ścieżki i dołączając ją,ext
aby ukończyć odpowiednią strukturę zmiany nazwy:Krótko mówiąc, aby pokazać jego prostotę:
Python 3.6+:
Wersje mniejsze niż Python 3.6 używają zamiast tego metody formatu ciągu:
źródło
pathlib
biblioteka została wprowadzona w Pythonie 3.4, więc dzielenie się odpowiedzią tutaj zapewnia również ekspozycję solidnego modułu, aby pokazać jego wszechstronność i wykorzystanie dla bardziej skomplikowanych wymagań.{}
służą do formatowania ciągów, o których można przeczytać tutaj . Ostatecznie dzieje się tak, że{}
get jest zastępowany zmiennymi przekazywanymi doformat
metody. Tak więc pierwszy{}
będzie zawierał to, co jest w środkuname_without_extension
, a drugi zawiera drugi argument, który jest po prostu1
.os.rename(old, new)
Można to znaleźć w dokumentach Pythona: http://docs.python.org/library/os.html
źródło
Zastosowanie
os.rename
. Ale musisz przekazać pełną ścieżkę obu plików do funkcji. Jeśli mam plika.txt
na pulpicie, zrobię to i muszę też podać pełny plik o zmienionej nazwie.źródło
źródło
chdir()
przejść do katalogu, np. Co dzieje się w systemie Windows, gdy jest to UNC? I robieniechdir()
ma skutki uboczne. Wolę po prostu określić niezbędne ścieżki doos.rename()
bezpośredniego, bezchdir()
ing.Możesz użyć os.system, aby wywołać terminal w celu wykonania zadania:
źródło
mv
wbudowany program wiersza polecenia unix do przenoszenia / zmiany nazwy pliku.źródło
os.path
z nowoczesnościąpathlib
jest dość niepewne.pathlib
Zamiast tego idź na całość .To powinno to zrobić. python 3+
źródło