Может быть, вы хотите получить это (python3):
test.txt:
10 + 15
22 - 71
33 + 64
код:
import operator
op = {'+': operator.add, '-': operator.sub}
with open('test.txt', 'r') as f:
lines = f.readlines()
for i in lines:
args = i.split()
val = op[args[1]](int(args[0]), int(args[-1]))
r = f'{i.strip()} = {val}'
print(r)
Нет никакого гарантируемого пути, но здесь не несколько возможностей:
1) Ищут заголовок на файле. К сожалению, заголовки являются определенными для файла, поэтому в то время как Вы могли бы быть в состоянии узнать, что это - файл RAR, Вы не получите более универсальный ответ того, является ли это текстом или двоичным файлом.
2) считают количество символа по сравнению с нетипами символов. Текстовые файлы будут главным образом алфавитными символами, в то время как двоичные файлы - особенно сжатые как rar, zip и такой - будут иметь тенденцию представлять байты более равномерно.
3) Ищут регулярно повторяющийся шаблон новых строк.
Если файл состоит из байтов 0x09 (вкладка), 0x0A (перевод строки), 0x0C (перевод формата), 0x0D (возврат каретки) или 0x20 через 0x7E, то это - вероятно, текст ASCII.
, Если файл содержит какой-либо другой управляющий символ ASCII, 0x00 через 0x1F, исключая три выше, то это - вероятно, двоичные данные.
текст UTF-8 следует за очень определенным шаблоном для любых байтов с высокого уровня битом, но кодировка фиксированной длины как ISO-8859-1 не делает. UTF-16 может часто содержать пустой байт (0x00), но только в любом положении.
Вам была бы нужна более слабая эвристика для чего-либо еще.
Только для сообщения я выбрал совершенно другой путь. Я мой случай, существует только 2 типа файлов, возможности, что любой данный файл будет двоичной единицей, высок. Так
Вы могли попробовать инструмент DROID .
Взгляните на библиотеку JMimeMagic.
jMimeMagic является библиотекой Java для определения типа MIME файлов или потоков.
Запустите файл -bi {имя файла}
. Если все, что он возвращает, начинается с «текста /», то это не двоичный код, иначе это так. ; -)