2016-09-05 7 views
0

Я использую xlrd 0.9.4, и я хотел бы проверить, действительно ли файл, который я должен открыть, действителен.xlrd - выпуск при открытии файла

Чтобы сделать это, я написал этот код in according with this question:

try: 
    book = xlrd.open_workbook(file_path) 
    print "Done" 
except XLRDError: 
    print "Wrong type of file." 

где file_path это путь моего файла.

Это нормально работает, проблема в следующем. Прежде всего, у меня есть действительный файл .xls, поэтому сценарий печатает Выполнено. Предположим, что действительный .xls-файл переименован (также расширение), например, из test.xls в test.txt.

Если я запускаю сценарий, у меня тот же результат (Выполнено).

Вместо этого, если я использую «настоящий» .txt-файл (пустой или с некоторым текстом), сценарий печатает Неверный тип файла.

Это происходит потому, что «структура» файла не изменяется? Я делаю что-то неправильно? Есть другой тип исключения, который я могу добавить в , за исключением ветка?

Заранее спасибо

+0

вы можете использовать 'if file_path.endswith (". Xls ") или file_path.endswith (". Xlsx "):' для проверки расширения. – Andrew

+0

Что вы подразумеваете под "valid"? –

+4

Что именно такое поведение не так, как вы ожидаете? Для меня это имеет полный смысл. Имя/расширение файла не имеет * ничего * для его содержимого. Фактически - вход может даже быть объектом StringIO, поэтому даже не было бы физического имени файла ... Вы запрашиваете библиотеку, если она может обрабатывать данные как действительную книгу, а приведенный выше код делает именно это ... –

ответ

2

Вы можете увидеть, как xlrd проверить файл перед чтением. В xldr source на строках 18-19 определены «магические» байты. Первые байты файла по сравнению с этой байтовой последовательностью в строке 85. Если не будет равное исключение, оно будет расти. Расширение файла не задействовано.

Подписи для разных типов файлов можно найти there.

+0

Большое вам спасибо! – Giordano

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

  • Нет связанных вопросов^_^