2010-03-22 36 views

Trả lời

192

Sử dụng os.rename:

os.rename('a.txt', 'b.kml') 
+24

Đừng quên "nhập os" – Vladtn

+4

Cần lưu ý rằng nếu các tập tin không có trong thư mục làm việc, bạn sẽ cần đường dẫn đầy đủ. – EndermanAPM

33
import shutil 

shutil.move('a.txt', 'b.kml') 

Điều này sẽ hoạt động để đổi tên hoặc di chuyển tệp.

+5

'shutil.move' không phải là một tốt tùy chọn do không phải là một hoạt động nguyên tử. Nếu tập tin được mở, ví dụ, 'shutil.move' sẽ tạo một tập tin với' new_name', nhưng sẽ không xóa tập tin với 'old_name' do đó để lại cho bạn với hai tập tin. Mặt khác, 'os.rename' sẽ không làm gì cả, đó là tùy chọn * tốt hơn *. Với 'shutil.move', ngay cả khi bạn gặp lỗi, bạn vẫn phải lo lắng về việc kiểm tra và xóa tệp lừa đảo. Chỉ cần không có giá trị khi ** một công cụ tốt hơn tồn tại: 'os.rename' **. – mvbentes

20

tập tin có thể bên 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) 
3

Bạn có thể sử dụng os.system để gọi thiết bị đầu cuối để hoàn thành tác vụ:

os.system('mv oldfile newfile') 
+0

Chỉ trên máy unix, mặc dù phải không? – LarsH

+0

có, điều này sẽ chỉ hoạt động trên một máy tính dựa trên Unix như 'mv' là một chương trình dòng lệnh dựng sẵn unix để di chuyển/đổi tên một tệp. –

+3

Tại sao bạn gọi một thiết bị đầu cuối và xác định một lệnh UNIX chỉ khi bạn có thể làm điều đó từ python trong một cách đa nền tảng? – EndermanAPM

4

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ờ được trên một phiên bản cũ, bạn có thể sử dụng phiên bản backported tìm thấy here

Giả sử bạn đang không ở trong các đường dẫn gốc (chỉ cần thêm một chút khó khăn với 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ể đường dẫn của bạn và tạo ra một đối tượng Path ra khỏi nó:

from pathlib import Path 
p = Path(some_path) 

Chỉ để cung cấp một số thông tin xung quanh đối tượng này chúng ta có bây giờ, chúng ta có thể trích xuất mọi thứ ra khỏi nó. Ví dụ, nếu vì lý do gì chúng tôi muốn đổi tên các tập tin bằng cách sửa đổi tên tập tin từ the_file để the_file_1, sau đó chúng tôi có thể nhận được phần filename:

name_without_extension = p.stem 

Và vẫn giữ phần mở rộng trong tay cũng như:

ext = p.suffix 

chúng tôi có thể thực hiện sửa đổi của chúng tôi với một thao tác chuỗi đơn giản:

new_file_name = "{}_{}".format(name_without_extension, 1) 

Và bây giờ chúng tôi có thể thực hiện đổi tên của chúng tôi bằng cách gọi phương pháp rename trên đối tượng con đường chúng tôi tạo ra và gắn vào các ext để hoàn thành cấu trúc đổi tên thích hợp chúng ta muốn:

p.rename(Path(p.parent, new_file_name + ext)) 

More ngay để giới thiệu đơn giản của nó:

from pathlib import Path 
p = Path(some_path) 
p.rename(Path(p.parent, "{}_{}".format(p.stem, 1) + p.ext)) 
+0

Tại sao bạn làm điều này thay vì câu trả lời được chấp nhận? Có vẻ phức tạp hơn rất nhiều – rbennell

+1

Vâng @rbennell, hầu hết câu trả lời này là một lời giải thích. Câu trả lời thực sự chỉ là ba dòng ở cuối. Hơn nữa, câu trả lời được chấp nhận được thực hiện một cách rõ ràng cho sự thay đổi tên đó. Câu trả lời này cung cấp một cách để hiển thị cách bạn có thể thao tác tên tệp để bảo toàn các phần mà bạn muốn trong đường dẫn hoặc tên của tệp. Hơn nữa, thư viện 'pathlib' được giới thiệu trong python 3.4 để 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. – idjaw

0
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") 

này nên làm điều đó . python 3+

0

Sử dụng os.rename. Nhưng bạn phải truyền đường dẫn đầy đủ của cả hai tệp vào hàm. Nếu tôi có một tập tin a.txt trên máy tính để bàn của tôi vì vậy tôi sẽ làm và tôi cũng phải cung cấp đầy đủ các tập tin đổi tên quá.

os.rename ('C: \ Users \ Desktop \ a.txt', 'C: \ Users \ Desktop \ b.kml')

Các vấn đề liên quan