Câu trả lời:
Sử dụng os.rename
:
import os
os.rename('a.txt', 'b.kml')
C:/folder/file.txt
trên Windows hoặc /home/file.txt
trên Linux / MacOS).
OSError
các hệ thống Windows. os.path.exists
nên được sử dụng để kiểm tra nếu mục tiêu tồn tại trước khi đổi tên. Điều này không tạo ra lỗi "Thời gian kiểm tra thời gian sử dụng", nhưng không có khả năng gây ra sự cố. (Tôi biết không có cách nào dễ dàng xung quanh điều này - xem tại đây .
os.replace
Tệp có thể nằm trong một thư mục, trong trường hợp đó chỉ định đường dẫn:
import os
old_file = os.path.join("directory", "a.txt")
new_file = os.path.join("directory", "b.kml")
os.rename(old_file, new_file)
import shutil
shutil.move('a.txt', 'b.kml')
Điều này sẽ làm việc để đổi tên hoặc di chuyển một tập tin.
shutil.move
không phải là một lựa chọn tốt do không phải là một hoạt động nguyên tử. Ví dụ, nếu tệp được mở, shutil.move
sẽ tạo một tệp với new_name
, nhưng sẽ không xóa tệp old_name
do đó để lại cho bạn hai tệp. os.rename
mặt khác sẽ không làm gì, đó là một lựa chọn tốt hơn . Với shutil.move
, ngay cả khi bạn bắt gặp lỗi, bạn vẫn sẽ phải lo lắng về việc kiểm tra và xóa tệp giả mạo. Chỉ không đáng khi nó tồn tại một công cụ tốt hơn :os.rename
.
Kể từ Python 3,4, người ta có thể sử dụng mô-đun pathlib để giải quyết vấn đề này.
Nếu bạn tình cờ ở phiên bản cũ hơn, bạn có thể sử dụng phiên bản backported được tìm thấy ở đây
Giả sử bạn không ở trong đường dẫn gốc (chỉ cần thêm một chút khó khăn vào nó) bạn muốn đổi tên và phải cung cấp một đường dẫn đầy đủ, chúng ta có thể xem xét điều này:
some_path = 'a/b/c/the_file.extension'
Vì vậy, bạn có thể lấy đường dẫn của mình và tạo một Path
đối tượng từ đó:
from pathlib import Path
p = Path(some_path)
Chỉ cần cung cấp một số thông tin xung quanh đối tượng này mà chúng ta có bây giờ, chúng ta có thể trích xuất những thứ từ nó. Ví dụ: nếu vì bất kỳ lý do gì chúng tôi muốn đổi tên tệp bằng cách sửa đổi tên tệp từ the_file
thành the_file_1
, thì chúng tôi có thể lấy phần tên tệp:
name_without_extension = p.stem
Và vẫn giữ phần mở rộng trong tay là tốt:
ext = p.suffix
Chúng tôi có thể thực hiện sửa đổi của mình với một thao tác chuỗi đơn giản:
Python 3.6 và lớn hơn sử dụng chuỗi f!
new_file_name = f"{name_without_extension}_1"
Nếu không thì:
new_file_name = "{}_{}".format(name_without_extension, 1)
Và bây giờ chúng ta có thể thực hiện đổi tên bằng cách gọi rename
phương thức trên đối tượng đường dẫn mà chúng ta đã tạo và nối thêm ext
để hoàn thành cấu trúc đổi tên phù hợp mà chúng ta muốn:
p.rename(Path(p.parent, new_file_name + ext))
Một thời gian ngắn nữa để thể hiện sự đơn giản của nó:
Python 3.6+:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, f"{p.stem}_1_{p.suffix}"))
Các phiên bản ít hơn Python 3.6 sử dụng phương thức định dạng chuỗi thay thế:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, "{}_{}_{}".format(p.stem, 1, p.suffix))
pathlib
thư viện được giới thiệu trong python 3.4, vì vậy việc chia sẻ câu trả lời ở đây cũng cung cấp độ phơi sáng cho một mô-đun rắn để thể hiện tính linh hoạt và cách sử dụng của nó cho các yêu cầu phức tạp hơn.
os.rename(old, new)
Điều này được tìm thấy trong các tài liệu Python: http://docs.python.org/l Library / os.html
Sử dụng os.rename
. Nhưng bạn phải truyền đầy đủ đường dẫn của cả hai tệp vào hàm. Nếu tôi có một tệp a.txt
trên máy tính để bàn của mình thì tôi sẽ làm và tôi cũng phải cung cấp đầy đủ các tệp đã đổi tên.
os.rename('C:\\Users\\Desktop\\a.txt', 'C:\\Users\\Desktop\\b.kml')
import os
# Set the path
path = 'a\\b\\c'
# save current working directory
saved_cwd = os.getcwd()
# change your cwd to the directory which contains files
os.chdir(path)
os.rename('a.txt', 'b.klm')
# moving back to the directory you were in
os.chdir(saved_cwd)
chdir()
vào một thư mục, ví dụ như những gì xảy ra trong Windows khi nó là UNC? Và làm một chdir()
có tác dụng phụ. Tôi chỉ muốn chỉ định các đường dẫn cần thiết để os.rename()
trực tiếp, không chdir()
ing.
Bạn có thể sử dụng os.system để gọi terminal để hoàn thành nhiệm vụ:
os.system('mv oldfile newfile')
mv
là một chương trình dòng lệnh unix dựng sẵn để di chuyển / đổi tên một tập tin.
import os
import re
from pathlib import Path
for f in os.listdir(training_data_dir2):
for file in os.listdir( training_data_dir2 + '/' + f):
oldfile= Path(training_data_dir2 + '/' + f + '/' + file)
newfile = Path(training_data_dir2 + '/' + f + '/' + file[49:])
p=oldfile
p.rename(newfile)
os.path
với hiện đại pathlib
là khá iffy. Đi tất cả các cách với pathlib
thay thế.
import shutil
import os
files = os.listdir("./pics/")
for key in range(0, len(files)):
print files[key]
shutil.move("./pics/" + files[key],"./pics/img" + str(key) + ".jpeg")
Điều này nên làm điều đó. trăn 3+