2013-02-28 19 views
17

Nie jestem pewien, dlaczego, ale z jakiegoś powodu, gdy mam "region" w nazwie pliku wyjściowego, to daje mi Ten błąd:Region: IOError: [Errno 22] nieprawidłowy tryb ("w") lub nazwa pliku

IOError [eRRNO 22] tryb nieważny ('w'), lub nazw: 'ścieżka \ regionlog.txt'

czyni to dla "region.txt", " logregion.txt ", itp.

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 

Dlaczego tak jest? Naprawdę chciałbym nazwać mój plik "regionlog.txt", ale wciąż pojawia się ten błąd. Czy jest jakiś sposób obejścia tego?

Odpowiedz

26

Stosować ukośniki:

'path/regionlog.txt' 

lub surowego ciągi:

r'path\regionlog.txt' 

Albo przynajmniej Ucieczka swoje backslashy:

'path\\regionlog.txt' 

 

\r to powrót karetki.

 

Inna opcja: wykorzystanie os.path.join i nie trzeba się martwić o ukośniki w ogóle:

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

trzeciej opcji: Podwójne Ukośniki. –

+1

Czwarta opcja: użyj 'os.path.join'. OP już zaimportował 'os.path'. –

1

w języku C standardowej, \t, \n, \r są znaki ewakuacyjne. \t jest poprzeczną do następnej pozycji TAB. \n to nowa linia, a \r to powrót karetki. Powinieneś użyć \\r lub /r, a rozwiążesz problem!

+0

Następnym razem sprawdź, czy wpisane słowo zostało poprawnie wyświetlone na ekranie, ponieważ '\\ r' pojawiło się jak' \ r', co wcale nie byłoby pomocne. –

0

Innym prostym rozwiązaniem jest zmiana „\ r” wystąpienia w ścieżce do nazwy pliku „\ R”