2012-04-16 27 views
8

Unicode dosya adı olan bir dosyayı açamıyorum. Yapmam Diyelim ki:açık dosya bir unicode dosya adıyla mı?

for i in os.listdir(): 
    open(i, 'r') 

Ben her zaman okumak ve dosyaya bir Unicode dize yazma ilgili sayfaları olsun, bazı çözüm aramaya çalıştığınızda, file() ile bir dosyayı açmak veya open() değil nasıl sahip olan bir unicode adı.

+2

kod Ben yapardım nasıl. Bunun nesi var? – kindall

+0

Evet, bu kod ne işe yaramıyor? – agf

cevap

27

Basitçe open() dosya adı için bir unicode dizesi geçirmek:

Python 2.x

:

Python 3.x ise
>>> open(u'someUnicodeFilenameλ') 
<open file u'someUnicodeFilename\u03bb', mode 'r' at 0x7f1b97e70780> 

, bütün dizeleri Unicode, bu nedenle hiçbir şey ona tam anlamıyla var .

Her zaman olduğu gibi, bir dosyayı açmanın en iyi yolunun her zaman with statementopen() ile birlikte kullanıldığını unutmayın.

Düzenleme: tavsiyem yine Python 2.x altında değişir os.listdir() ile ilgili olarak, dikkatli olmak zorunda: Dosya adlarını döndürür

os.listdir(), bir sorun yarattığını: should it dönüşü Dosya adlarının Unicode sürümü, ya da kodlanmış sürümleri içeren 8-bit dizeleri dönmelidir? os.listdir(), dizin yolunu 8 bitlik bir dize veya bir Unicode dizesi olarak sağlayıp sağlamadığınıza bağlı olarak her ikisini de yapar. Bir Unicode dizgisini yol olarak iletirseniz, dosya isimlerinin kodlaması kullanılarak dosya adları çözülür ve bir Unicode dizgisi listesi döndürülür, 8 bitlik bir yol iletilirse dosya adlarının 8 bitlik sürümleri döndürülür. iyi dahilinde temsil edilmeyeceği - Dosya hala her iki şekilde açacağını

>>> os.listdir(".") 
['someUnicodeFilename\xce\xbb', 'old', 'Dropbox', 'gdrb'] 
>>> os.listdir(u".") 
[u'someUnicodeFilename\u03bb', u'old', u'Dropbox', u'gdrb'] 

Not: Eğer Unicode kurtulmak istiyorsak kısacası Yani

Source

, içinde Unicode koymak Python 8-bit bir dizi olacak, ama yine de işe yarayacak.

open('someUnicodeFilename\xce\xbb') 
<open file 'someUnicodeFilenameλ', mode 'r' at 0x7f1b97e70660> 

Her zamanki gibi 3.x altında her zaman Unicode olur.

+1

Unicode dizeleri kendim oluşturmayan, os.listdir() 'gibi bir şey kullanırsam ne olur? –

+0

Unicode destekli bir dosya sisteminiz varsa, os.listdir() unicode dizeleri döndüreceğini düşünürüm. –

+1

@ user975135 Unicode ile Python 2.x ve '' os.listdir() '' hakkında bir not eklemek için düzenlenmiştir. –

7

Bu deneyebilirsiniz: Yayınladığınız

import os 
import sys 

for filename in os.listdir(u"/your-direcory-path/"): 
    open(filename.encode(sys.getfilesystemencoding()), "r") 
İlgili konular