Просматривайте расширения файлов в поисках символов, отличных от ASCII — Python

#python #ascii #file-extension #file-encodings

#python #ascii #расширение файла #файловые кодировки

Вопрос:

Я написал небольшую программу на Python, которая ищет в каталоге (и его подкаталогах) файлы, содержащие символы, отличные от ASCII.

Я хочу это улучшить. Я знаю, что определенными файлами в этом «каталоге» могут быть ZIP, DTA / OUT, OMX, SFD / SF3 и т.д. … Файлы, которые ДОЛЖНЫ содержать символы, отличные от ASCII. Итак, я хочу знать, что они есть, и проверять те, которые не должны содержать символов ASCII, потому что моя конечная цель — найти файлы, которые не должны содержать символов, отличных от ASCII, которые это делают, и удалить их (поврежденный диск с поврежденными секторами с важными данными на ТБ).

Я думаю, что следует дополнительно просмотреть файлы, которые находятся в части «except» блока try / except в Python, который выглядит следующим образом:

 try:
    content.encode('ascii')
    output.write(str(counter)   ", "   file   ", ASCIIn")
    print str(counter)   " ASCII file status logged successfully: "   file
    counter  = 1 

except UnicodeDecodeError:
    output.write(str(counter)   ", "   file   ", non-ASCIIn")
    print str(counter)   " non-ASCII file status logged successfully: "   file
    counter  = 1 
  

Когда я начал писать код, я понял, что при повторном просмотре запрашивается, является ли файл '.zip' или '.sfd' pr '.omx' , и т.д… это была бы неуклюжая программа, которая работала бы вечно.

Есть ли какой-либо способ поиска по группе расширений файлов, кроме одного за другим? Может быть, файл, содержащий эти расширения, для проверки? Или что-то, о чем я не подумал? Заранее приношу свои извинения, если это глупый вопрос, но в Python так много интересных функций, что я уверен, что упускаю что-то, что может помочь.

Приветствия.

Комментарии:

1. Я думаю, что есть лучшее решение, чем простой список исключений, но чтобы вы знали, что выполнение этого таким образом не было бы медленным, вы выполняете простое регулярное выражение или сравнение строк.

2. Это может помочь вашему состоянию ума выработать правильную терминологию. Почти во всех современных системах файлы содержат байты, а не символы. Итак, вы ищете значения в байтах 128 или больше. Это байты «не ASCII». Если вы также хотите исключить элементы управления, отличные от новой строки, табуляции и т.д., Тогда вы будете искать определенные значения в байтах меньше 32 и для 127.

3. Спасибо за урок терминологии… Я попытаюсь думать таким образом, и, возможно, это поможет моему общему взгляду на проблемы такого типа.

Ответ №1:

Я полагаю, что, поскольку ответов нет, я могу пойти дальше и ответить на это сам с частичным ответом. По сути, я использовал другой подход и искал конкретный файл, которого, как ожидается, будет достаточно для этого общего ресурса, а затем сделаю то же самое для каждого файла. Это немного халтурно, но это позволит завершить работу.