我是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)
答案 0 :(得分: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目录路径),这将读取目录并以Unicode格式返回文件名。如果您需要递归,请使用os.walk(u'path/to/files')
。