2011-01-28 3 views
1

Использование Python 2.6.5 в Windows XP, я обрабатываю каталог файлов, вызывая os.stat на них, чтобы получить их размер. Сценарий терпит неудачу, когда он достигает определенного файла, который имеет не-ASCII-символы, встроенные в имя. Исключение составляет то, что os.stat не смог найти указанный файл. Я знаю, что файл есть, потому что я могу играть в iTunes или VLC Media Player.Ошибка os.stat в файле с фанковыми символами

Имя файла в вопросе есть

1-02 Só Danço Samba (Jazz Samba).m4a 

Только в случае, если не отображаются символы, строка

'1-02 So\xb4 Danc\xb8o Samba (Jazz Samba).m4a' 

ли что-то я должен или может делать, чтобы сделать имя приемлемым для os.stat? Кстати, попытка открыть файл в python также не работает по той же причине.

+1

Где ваш скрипт получить имя файла из? –

ответ

1

Попробуйте вставить строку # coding=UTF-8 в начало вашего файла python (это делает разницу только для юникода в вашем скрипте, как указывает Филипп) и убедитесь, что вы сохраняете имена файлов как unicode вместо str.

протестирована со следующими:

# coding=UTF-8 

import os 
fname = u'/temp/1-02 Só Danço Samba (Jazz Samba).m4a' 
print(os.stat(fname)) 
+1

Первый способ поможет только для имен файлов, жестко закодированных в исходном файле. Второй момент более важен: строки Unicode должны использоваться для всех имен файлов и каталогов (например, в качестве аргумента функции 'listdir'). – Philipp

+0

Вы правы, я забыл, что я делал, когда тестировал. –

+0

Название происходит от выполнения os.walk через дерево каталогов. Как преобразовать строку в unicode (или она из unicode)? Как написать цикл для использования строк unicode вместо обычных строк? – sizzzzlerz

Смежные вопросы