2011-09-19 38 views
6

Tôi đang viết một tập lệnh Python đơn giản để đổi tên tất cả các tệp trong một thư mục để thay thế tất cả dấu cách trong tên tệp bằng dấu gạch nối. Tôi có những điều sau đây mà bị rơi trên os.renameĐổi tên tên tệp có chứa dấu cách

import os 

path = os.getcwd() 
filenames = os.listdir(path) 

for filename in filenames: 
    os.rename(os.path.join(path + filename), os.path.join(path + filename.replace(" ", "-"))) 

Cung cấp cho các lỗi trong giao diện điều khiển:

Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
OSError: [Errno 2] No such file or directory 

Bất kỳ ý tưởng về lý do tại sao điều này xảy ra?

Trả lời

19

Tôi nghĩ rằng nó chỉ là bởi vì bạn có cú pháp sai trong cuộc gọi của bạn đối với os.path.join, các mục bạn đang tham gia phải được cung cấp dưới dạng hai đối số riêng biệt, được phân tách bằng dấu phẩy. Điều này phù hợp với tôi:

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> path = os.getcwd() 
>>> filenames = os.listdir(path) 
>>> for filename in filenames: 
...  os.rename(os.path.join(path, filename), os.path.join(path, filename.replace(' ', '-'))) 
... 
>>> 
8

Nếu bạn đã có trong thư mục chứa các tập tin bạn muốn đổi tên, bạn không cần phải cung cấp đường dẫn tuyệt đối:

for filename in filenames: 
    os.rename(filename, filename.replace(" ", "-")) 
+1

+1 Lỗi thực tế là bạn không chuyển một danh sách các đối số đến 'os.path.join' - bạn nối một chuỗi ký tự bằng dấu +, thay vì đi qua dấu phẩy -nhập danh sách - nhưng vì điều này là thừa, chỉ cần lấy nó ra. – tripleee

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