2013-02-28 27 views
17

Tôi không chắc chắn lý do, nhưng vì lý do nào đó, bất cứ khi nào tôi có "vùng" trong tên tệp của tệp đầu ra, nó mang lại cho tôi lỗi này:Khu vực: IOError: [Errno 22] chế độ không hợp lệ ('w') hoặc tên tệp

IOError: [Errno 22] chế độ không hợp lệ ('w') hoặc filename: 'đường \ regionlog.txt'

Nó làm điều này cho "region.txt", " logregion.txt ", v.v.

class writeTo: 
    def __init__(self, stdout, name): 
     self.stdout = stdout 
     self.log = file(name, 'w') #here is where it says the error occurs 

output = os.path.abspath('path\regionlog.txt') 
writer = writeTo(sys.stdout, output) #and here too 

Tại sao điều này? Tôi thực sự muốn đặt tên cho tệp của tôi là "regionlog.txt" nhưng nó vẫn tiếp tục gặp lỗi đó. Có cách nào xung quanh nó không?

Trả lời

26

Sử dụng dấu gạch chéo:

'path/regionlog.txt' 

Hoặc chuỗi liệu:

r'path\regionlog.txt' 

Hoặc ít nhất thoát backslashes của bạn:

'path\\regionlog.txt' 

 

\r là một vận chuyển trở lại.

 

Một lựa chọn khác: sử dụng os.path.join và bạn sẽ không phải lo lắng về dấu gạch chéo ở tất cả:

output = os.path.abspath(os.path.join('path', 'regionlog.txt')) 
+1

tùy chọn thứ ba: gấp đôi so với dấu gạch chéo. –

+1

Tùy chọn thứ tư: sử dụng 'os.path.join'. OP đã nhập 'os.path'. –

1

Trong ngôn ngữ tiêu chuẩn C, \t, \n, \r là các ký tự thoát. \t là giao điểm ngang đến vị trí TAB tiếp theo. \n là một dòng mới và \r là trở về vận chuyển. Bạn nên sử dụng \\r hoặc /r và bạn sẽ giải quyết được vấn đề!

+0

Lần sau, hãy kiểm tra để chắc chắn rằng những gì bạn đã gõ xuất hiện chính xác trên màn hình, vì '\\ r' của bạn xuất hiện như' \ r', điều này sẽ không hữu ích chút nào. –

0

Một giải pháp đơn giản là thay đổi "\ r" trường hợp trong đường dẫn tên tập tin để "\ R"

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