Wykryj format pliku i sprawdź zgodność formatu
Czasami konieczne jest określenie formatu dokumentu przed otwarciem, ponieważ rozszerzenie pliku nie gwarantuje, że zawartość pliku jest odpowiednia. Wiadomo na przykład, że Crystal Reports często generuje dokumenty w formacie RTF, ale nadaje im rozszerzenie .doc.
Aspose.Words zapewnia możliwość uzyskania informacji o typie pliku, aby uniknąć wyjątku, jeśli nie jesteś pewien, jaka jest rzeczywista zawartość pliku.
Wykryj format pliku bez wyjątku
Kiedy masz do czynienia z wieloma dokumentami w różnych formatach plików, może zaistnieć potrzeba oddzielenia plików, które mogą być przetwarzane przez Aspose.Words, od tych, które nie mogą. Możesz także chcieć wiedzieć, dlaczego niektórych dokumentów nie można przetworzyć.
Jeśli spróbujesz załadować plik do obiektu Document i Aspose.Words nie będzie w stanie rozpoznać formatu pliku lub format nie jest obsługiwany, Aspose.Words zgłosi wyjątek. Możesz wychwycić te wyjątki i przeanalizować je, ale Aspose.Words udostępnia również metodę detect_file_format, która pozwala nam szybko określić format pliku bez ładowania dokumentu z możliwymi wyjątkami. Ta metoda zwraca obiekt FileFormatInfo zawierający wykryte informacje o typie pliku.
Sprawdź zgodność formatu plików
Możemy sprawdzić zgodność formatu wszystkich plików w wybranym folderze i posortować je według formatu do odpowiednich podfolderów.
Ponieważ mamy do czynienia z zawartością folderu, pierwszą rzeczą, którą musimy zrobić, to pobrać kolekcję wszystkich plików w tym folderze za pomocą metody listdir modułu os.
Poniższy przykład kodu pokazuje, jak uzyskać listę wszystkich plików w folderze:
# 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"))) | |
Po zebraniu wszystkich plików resztę pracy wykonuje metoda detect_file_format, która sprawdza format pliku.
Poniższy przykład kodu pokazuje, jak iterować po zebranej liście plików, sprawdzać format każdego pliku i przenosić każdy plik do odpowiedniego folderu:
# 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)) | |
Pliki przenoszone są do odpowiednich podfolderów metodą skopiować plik modułu zamknięty.
W powyższym przykładzie użyto następujących plików. Nazwa pliku znajduje się po lewej stronie, a jego opis po prawej:
Group plików | Dokument wejściowy | Typ |
---|---|---|
Obsługiwane formaty plików | Plik testowy (Doc).doc | Dokument Microsoft Word 95/6.0 lub Microsoft Word 97 – 2003. |
Plik testowy (Dot ).dot |
Szablon Microsoft Word 95/6.0 lub Microsoft Word 97 – 2003. | |
Plik testowy (Docx).docx | Dokument Office Open XML WordprocessingML bez makr. | |
Plik testowy (Docm).docm | Dokument Office Open XML WordprocessingML z makrami. | |
Plik testowy (Dotx).dotx | Szablon Office Open XML WordprocessingML. | |
Plik testowy (Dotm).dotm | Szablon Office Open XML WordprocessingML z makrami. | |
Plik testowy (XML).xml | Dokument OOXML FlatOPC. | |
Plik testowy (RTF).rtf | Dokument w formacie Rich Text. | |
Plik testowy (WordML).xml | Dokument Microsoft Word 2003 WordprocessingML. | |
Plik testowy (HTML).html | Dokument HTML. | |
Plik testowy (MHTML).mhtml | Dokument MHTML (archiwum internetowe). | |
Plik testowy (Odt).odt | Tekst OpenDocument (OpenOffice Writer). | |
Plik testowy (Ott).ott | Szablon dokumentu OpenDocument. | |
Plik testowy (DocPreWord60).doc | Dokument Microsoft Word 2.0. | |
Zaszyfrowane dokumenty | Plik testowy (Enc).doc | Zaszyfrowany dokument Microsoft Word 95/6.0 lub Microsoft Word 97 – 2003. |
Plik testowy (Enc).docx | Zaszyfrowany dokument Office Open XML WordprocessingML. | |
Nieobsługiwane formaty plików | Plik testowy (JPG).jpg | Plik obrazu JPEG. |