Откриване на файлов формат и проверка на съвместимост формат
Понякога е необходимо да се определи форматът на документа преди отваряне, защото разширението на файла не гарантира, че съдържанието на файла е подходящо. Например, известно е, че Crystal Reports често издава документи в RTF формат, но им дава .doc разширение.
Aspose.Words предоставя възможност за получаване на информация за типа на файла, за да се избегне изключение, ако не сте сигурни какво е действителното съдържание на файла.
Откриване на файлов формат без изключение
Когато се занимавате с множество документи в различни формати на файлове, може да се наложи да отделите тези файлове, които могат да бъдат обработвани от Aspose.Words от тези, които не могат. Може да искате да знаете защо някои от документите не могат да бъдат обработени.
Ако се опитате да заредите файл в Document обект и Aspose.Words не може да разпознае формата на файла или форматът не се поддържа, Aspose.Words ще направи изключение. Можете да хванете тези изключения и да ги анализирате, но Aspose.Words и осигурява detect_file_format метод, който ни позволява бързо да определим формата на файла, без да зареждаме документ с възможни изключения. Този метод връща a FileFormatInfo обект, който съдържа засечената информация за типа файл.
Проверка на съвместимостта на файловия формат
Можем да проверим съвместимостта във формат на всички файлове в избраната папка и да ги сортираме по формат в съответните подпапки.
Тъй като ние се занимаваме със съдържанието в папка, първото нещо, което трябва да направите е да получите колекция от всички файлове в тази папка с помощта на listdir метод на os модул.
Следният пример за код показва как да получите списък на всички файлове в папката:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
fileList = (file for file in os.listdir(docs_base.my_dir) | |
if (os.path.isfile(os.path.join(docs_base.my_dir, file)) and not file.endswith("Corrupted document.docx"))) | |
Когато всички файлове са събрани, останалата част от работата се извършва от detect_file_format метод, който проверява формата на файла.
Следният пример за код показва как да се итератира върху събрания списък от файлове, да се провери формата на всеки файл и да се премести всеки файл в съответната папка:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
supported_dir = docs_base.artifacts_dir + "Supported" | |
unknown_dir = docs_base.artifacts_dir + "Unknown" | |
encrypted_dir = docs_base.artifacts_dir + "Encrypted" | |
pre97_dir = docs_base.artifacts_dir + "Pre97" | |
# Create the directories if they do not already exist. | |
if not os.path.exists(supported_dir): | |
os.makedirs(supported_dir) | |
if not os.path.exists(unknown_dir): | |
os.makedirs(unknown_dir) | |
if not os.path.exists(encrypted_dir): | |
os.makedirs(encrypted_dir) | |
if not os.path.exists(pre97_dir): | |
os.makedirs(pre97_dir) | |
fileList = (file for file in os.listdir(docs_base.my_dir) | |
if (os.path.isfile(os.path.join(docs_base.my_dir, file)) and not file.endswith("Corrupted document.docx"))) | |
for fileName in fileList: | |
name_only = fileName | |
fileName = os.path.join(docs_base.my_dir, name_only) | |
print(name_only) | |
info = aw.FileFormatUtil.detect_file_format(fileName) | |
lf = info.load_format | |
# Display the document type | |
if lf == aw.LoadFormat.DOC: | |
print("\tMicrosoft Word 97-2003 document.") | |
elif lf == aw.LoadFormat.DOT: | |
print("\tMicrosoft Word 97-2003 template.") | |
elif lf == aw.LoadFormat.DOCX: | |
print("\tOffice Open XML WordprocessingML Macro-Free Document.") | |
elif lf == aw.LoadFormat.DOCM: | |
print("\tOffice Open XML WordprocessingML Macro-Enabled Document.") | |
elif lf == aw.LoadFormat.DOTX: | |
print("\tOffice Open XML WordprocessingML Macro-Free Template.") | |
elif lf == aw.LoadFormat.DOTM: | |
print("\tOffice Open XML WordprocessingML Macro-Enabled Template.") | |
elif lf == aw.LoadFormat.FLAT_OPC: | |
print("\tFlat OPC document.") | |
elif lf == aw.LoadFormat.RTF: | |
print("\tRTF format.") | |
elif lf == aw.LoadFormat.WORD_ML: | |
print("\tMicrosoft Word 2003 WordprocessingML format.") | |
elif lf == aw.LoadFormat.HTML: | |
print("\tHTML format.") | |
elif lf == aw.LoadFormat.MHTML: | |
print("\tMHTML (Web archive) format.") | |
elif lf == aw.LoadFormat.ODT: | |
print("\tOpenDocument Text.") | |
elif lf == aw.LoadFormat.OTT: | |
print("\tOpenDocument Text Template.") | |
elif lf == aw.LoadFormat.DOC_PRE_WORD60: | |
print("\tMS Word 6 or Word 95 format.") | |
elif lf == aw.LoadFormat.UNKNOWN: | |
print("\tUnknown format.") | |
if info.is_encrypted: | |
print("\tAn encrypted document.") | |
shutil.copyfile(fileName, os.path.join(encrypted_dir, name_only)) | |
else: | |
if lf == aw.LoadFormat.DOC_PRE_WORD60: | |
shutil.copyfile(fileName, os.path.join(pre97_dir, name_only)) | |
elif lf == aw.LoadFormat.UNKNOWN: | |
shutil.copyfile(fileName, os.path.join(unknown_dir, name_only)) | |
else: | |
shutil.copyfile(fileName, os.path.join(supported_dir, name_only)) | |
Файловете се преместват в подходящи подпапки с помощта на копиране на файл метод на shutil модул.
В горния пример се използват следните файлове. Името на файла е отляво и описанието му е отдясно:
Group на файлове | Входен документ | Тип |
---|---|---|
Поддържани файлови формати | Тестов файл (doc).doc | Microsoft Word 95/ 6. 0 или Microsoft Word 97 - 2003 г. документ. |
Тестов файл (Dot ). точка |
Microsoft Word 95/ 6. 0 или Microsoft Word 97 за 2003. | |
Тестов файл (Docx).docx | Office Open XML Wordprocessing Документ на ML без макроси. | |
Тестов файл (Doccm).docm | Office Open XML Wordprocessing ML документ с макроси. | |
Тестов файл (Dotx). dotx | Office Open XML Wordprocessing Образец ML. | |
Тестов файл (Dotm). точка | Office Open XML Wordprocessing Образец ML с макроси. | |
Тестов файл (XML). xml | FlatOPC OOXML документ. | |
Тестов файл (RTF). rtf | Документ с богат текстов формат. | |
Тестов файл (WordML). xml | Microsoft Word 2003 Обработка на думи Документ на ML. | |
Тестов файл (HTML).html | HTML документ. | |
Тестов файл (MHTML). mhtml | MHTML (Уеб архив) документ. | |
Тестов файл (Odt).odt | Open Document Text (OpenOffice Writer). | |
Тестов файл (Ott).ott | Шаблон с отворен документ. | |
Тестов файл (docPreWord60).doc | Microsoft Word 2.0 документа. | |
Кодирани документи | Тестов файл (Enc).doc | Шифрована Microsoft Word 95/ 6. 0 или Microsoft Word 97 - 2003 г. документ. |
Тестов файл (Enc).docx | Шифрована Office Open XML обработка на думи Документ на ML. | |
Неподдържани файлови формати | Тестов файл (JPG). jpg | Файл с изображения JPEG. |