Уведомления

Группа в Telegram: @pythonsu

#1 Март 16, 2011 16:21:50

rootme
От:
Зарегистрирован: 2011-03-16
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка

Здравствуйте,

Существует задача написания скрипта в домене Windows, который будет уметь считать размер сетевой папки. Сам алгоритм расчета сетевой папки реализован с помощью функций os.walk, os.path.join, os.path.getsize модуля os. Код (часть, отвечающая за Map Network Drive опущена):

# -*- coding: koi8-r -*-
import os

def f_size_0a(arg1):
a = os.walk(arg1)
f_total = 0

for x in a:
p_1 = str(x[0])
fn = x[2]
total = 0
for i in fn:
f_1 = str(i)
npath = os.path.join(p_1, f_1)
fs = os.path.getsize(npath)
total = fs + total
f_total = total + f_total
return f_total

fl1 = raw_input("Enter folder name: ")

if os.path.isdir(fl1) == 1:
rez = f_size_0a(fl1)
print rez
else:
print "Folder does not exist!"

raw_input()
Проблема в том, что если в папке храниться файл и его название представлено в непонятной кодировке, выдается ошибка:

Traceback (most recent call last):
File "C:\py\walk.py", line 26, in <module>
rez = f_size_0a(fl1)
File "C:\py\walk.py", line 15, in f_size_0a
fs = os.path.getsize(npath)
File "C:\Python27\lib\genericpath.py", line 49, in getsize
return os.stat(filename).st_size
WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect: 'U:\\lgks\\????? 13.03.09.pdf'
Понятно, что проблема в кодировке, но как я не старался ее изменить путем перевода в Unicode строку - ничего не получается. Подскажите как можно решить эту проблему?



Офлайн

#2 Март 16, 2011 17:13:30

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Кодировка

rootme
но как я не старался ее изменить путем перевода в Unicode строку - ничего не получается.
Когда переводите в юникод, укажите параметр ignore или replace
http://docs.python.org/howto/unicode.html



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version