2013-02-28 15 views
17

Я не уверен, почему, но почему-то, когда у меня есть «область» в имени файла выходного файла, это дает мне эта ошибка:Регион: IOError: [Errno 22] неверный режим ('w') или имя файла

IOError: [Errno 22] недопустимый режим ('ш') или имя файла: 'путь \ regionlog.txt'

Он делает это для "region.txt", " logregion.txt " и т. д.

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 

Почему это? Я действительно хотел бы назвать мой файл «regionlog.txt», но он продолжает придумывать эту ошибку. Есть ли способ обойти это?

ответ

26

Используйте прямой косой черты:

'path/regionlog.txt' 

Или сырые строки:

r'path\regionlog.txt' 

Или, по крайней мере, бежать ваши обратные слэши:

'path\\regionlog.txt' 

 

\r - возврат каретки.

 

Другой вариант: использовать os.path.join и вам не придется беспокоиться о косых черт вообще:

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

третий вариант: двойной косой черты. –

+1

Четвертый вариант: используйте 'os.path.join'. OP уже импортировал 'os.path'. –

1

В стандартном языке C, \t, \n, \r являются экранирующих символов. \t является поперечным для следующей позиции ТАВ. \n - это символ новой строки, а \r - возврат каретки. Вы должны использовать \\r или /r, и вы решите проблему!

+0

В следующий раз проверьте, правильно ли вы напечатали на экране, так как ваш '\\ r' появился, как' \ r', что совсем не помогло бы. –

0

Другое простое решение меняет "\ г" экземпляры в имени файла путь к "\ R"

Смежные вопросы