python-2.7 - Python读取unicode文件名

标签 python-2.7 unicode size

我是 Python 新手。我正在尝试使用 os.path.getsize() 来获取文件的大小。但是,如果文件名不是英文,而是中文、德文、法文等,Python 无法识别,也不会返回文件的大小。你能帮我吗?如何让Python识别文件名并返回此类文件的大小?

例如:文件名称为:“Показатели естественного и миграционного прироста до 2030г.doc”。 path="C:\xxxx\xxx\xxxx\Показатели естественного и миграционного прироста до 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)

最佳答案

使用 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 目录路径),它将读取目录并返回 Unicode 格式的文件名。如果需要递归,请使用 os.walk(u'path/to/files') .

关于python-2.7 - Python读取unicode文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17437228/

相关文章:

python - 如何替换函数中 if 语句中的变量?

JSON指定 "any UNICODE character"吗?

python - 用一个空格替换非 ASCII 字符

没有硬编码大小的 Java 数组声明

python - 如何从另一个命名元组推导或子类型命名元组?

python - python 2的Inspect模块中的签名方法

python - 确保 COM 连接启动的进程被终止

perl - 获取代码点的所有 Unicode 别名

label - 如何调整标签的宽度?

android - Andengine,在不保持宽高比的情况下缩放图像以填充屏幕大小