2

私はPythonが初めてです。os.path.getsize()ファイルのサイズを取得するために使用しようとしています。ただし、ファイル名が英語ではなく、中国語、ドイツ語、フランス語などの場合、Python はそれを認識できず、ファイルのサイズを返しません。それを手伝ってくれませんか?Python にファイル名を認識させ、これらの種類のファイルのサイズを返すにはどうすればよいですか?

例: ファイルの名前は次のとおりです。path="C:\xxxx\xxx\xxxx\Pоказатели естественного и миграционного прироста до 2030г.doc"

を使いたいos.path.getsize(path)です。しかし、それはファイル名を認識しません。どうすればいいのか教えていただけませんか?

どうもありがとうございました!

import codecs,cStringIO

class UnicodeWriter:

        def __init__(self, f, dialect=csv.excel, encoding="utf-8-sig", **kwds):
        self.queue = cStringIO.StringIO()
        self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
        self.stream = f
        self.encoder = codecs.getincrementalencoder(encoding)()
    def writerow(self, row):
        self.writer.writerow([s.encode("utf-8") for s in row])
        data = self.queue.getvalue()
        data = data.decode("utf-8")
        data = self.encoder.encode(data)
        self.stream.write(data)
        self.queue.truncate(0)
    def writerows(self, rows):
        for row in rows:
            self.writerow(row)
4

1 に答える 1

2

Unicode パスを使用し、ソース ファイルが保存されるエンコーディングを必ず指定してください。

#python2
#coding: utf8
import os
path = u'Показатели естественного и миграционного прироста до 2030г.doc'
with open(path,'w') as f:
    f.write('hello')
print os.path.getsize(path)

結果:

5

ファイルが正しく作成されたことを確認します。

C:\>dir *.doc
 Volume in drive C has no label.
 Volume Serial Number is CE8B-D448

 Directory of C:\

07/02/2013  09:51 PM                 5 Показатели естественного и миграционного прироста до 2030г.doc
               1 File(s)              5 bytes
               0 Dir(s)  83,018,432,512 bytes free

コメントに応じて編集

多数のファイルを処理する必要がある場合は、os.listdir(u'path/to/files')(Unicode ディレクトリ パスを指定して) and を使用すると、ディレクトリが読み取られ、ファイル名が Unicode で返されます。再帰が必要な場合は、 を使用しますos.walk(u'path/to/files')

于 2013-07-03T04:54:04.163 に答える