Фактически вы можете загрузить файл в строку и выполнить поиск этой строки для последовательности байтов 0xffc0
с использованием метода str.find()
. Он работает для любой последовательности байтов.
Код для этого зависит от пары вещей. Если вы откроете файл в двоичном режиме, и вы используете Python 3 (оба из которых, вероятно, являются наилучшей практикой для этого сценария), вам нужно будет искать строку байтов (в отличие от символьной строки), что означает, что вы должны префикс строки b
.
with open(filename, 'rb') as f:
s = f.read()
s.find(b'\xff\xc0')
Если открыть файл в текстовом режиме в Python 3, вы должны искать строку символов:
with open(filename, 'r') as f:
s = f.read()
s.find('\xff\xc0')
хотя нет особых причин, чтобы сделать это. Это не дает вам преимуществ по сравнению с предыдущим способом, и если вы находитесь на платформе, которая обрабатывает двоичные файлы и текстовые файлы по-разному (например, Windows), есть вероятность, что это вызовет проблемы.
Python 2 не делает различия между строками байтов и символьными строками, поэтому, если вы используете эту версию, неважно, включите или исключите b
в b'\xff\xc0'
. И если ваша платформа обрабатывает двоичные файлы и текстовые файлы одинаково (например, Mac или Linux), не имеет значения, используете ли вы 'r'
или 'rb'
в качестве файлового режима. Но я бы порекомендовал использовать что-то вроде первого примера кода выше для простоты совместимости - в случае, если вы когда-либо переключитесь на Python 3, это еще не все, что нужно исправить.
Вы когда-нибудь заглядывали в воображение? IIRC есть также библиотека python для этого. – txwikinger
У меня есть, и он отлично работает, но довольно просто найти размеры файла. – Parand
вы должны использовать модуль, подходящий для чего-то вроде этого http://snippets.dzone.com/posts/show/1021 –