Wystarczy przejść open()
ciąg Unicode dla nazwy pliku:
w Pythonie 2.x:
>>> open(u'someUnicodeFilenameλ')
<open file u'someUnicodeFilename\u03bb', mode 'r' at 0x7f1b97e70780>
w Pythonie 3.x, wszystkie ciągi są Unicode, więc nie ma dosłownie nic do niego .
Jak zawsze należy pamiętać, że najlepszym sposobem otwierania pliku zawsze jest użycie with
statement w połączeniu z open()
.
Edit: W odniesieniu do os.listdir()
rada ponownie zmienia się pod Pythona 2.x, trzeba być ostrożnym:
os.listdir(), która zwraca nazwy plików, podnosi kwestię: Powinno powrót wersja nazw plików w standardzie Unicode, czy powinna zwracać 8-bitowe łańcuchy zawierające zakodowane wersje? os.listdir() zrobi oba, w zależności od tego, czy podałeś ścieżkę do katalogu jako 8-bitowy ciąg znaków czy ciąg znaków Unicode. Jeśli jako ścieżkę zostanie przekazany ciąg znaków Unicode, nazwy plików zostaną zdekodowane przy użyciu kodowania systemu plików, a lista ciągów znaków Unicode zostanie zwrócona, natomiast podanie 8-bitowej ścieżki zwróci 8-bitowe wersje nazw plików.
Source
Tak w skrócie, jeśli chcesz Unicode, umieścić w Unicode:
>>> os.listdir(".")
['someUnicodeFilename\xce\xbb', 'old', 'Dropbox', 'gdrb']
>>> os.listdir(u".")
[u'someUnicodeFilename\u03bb', u'old', u'Dropbox', u'gdrb']
Zauważ, że plik będzie nadal otwarte w obu kierunkach - nie będzie reprezentował dobrze w Python, ponieważ będzie to ciąg 8-bitowy, ale nadal będzie działał.
open('someUnicodeFilename\xce\xbb')
<open file 'someUnicodeFilenameλ', mode 'r' at 0x7f1b97e70660>
Pod 3.x, jak zawsze, zawsze jest to kod Unicode.
Kod Państwo napisali to w jaki sposób to zrobić. Co jest z tym nie tak? – kindall
Tak, a co z tym kodem nie działa? – agf