我是 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/