文字列としてデータを受信しました。データをファイルに書き込む必要がありますが、データが圧縮/圧縮されていることがあり、時には単なるテキストであることがあります。私はコンテンツタイプを決定する必要があるので、それを.txtファイルまたは.tgzファイルに書き込むかどうかを知っています。どのようにこれを達成するための任意のアイデア?私のデータがファイルではなく文字列であっても、何とかMIMEタイプを使用できますか?文字列のコンテンツタイプを特定する方法
ありがとうございました。
文字列としてデータを受信しました。データをファイルに書き込む必要がありますが、データが圧縮/圧縮されていることがあり、時には単なるテキストであることがあります。私はコンテンツタイプを決定する必要があるので、それを.txtファイルまたは.tgzファイルに書き込むかどうかを知っています。どのようにこれを達成するための任意のアイデア?私のデータがファイルではなく文字列であっても、何とかMIMEタイプを使用できますか?文字列のコンテンツタイプを特定する方法
ありがとうございました。
gzipとzipは、圧縮データの前に別々のヘッダーを使用します。選択肢がこれらの間だけである場合、mimetypes
よりも速いチェックを行うことができます。
mimetypes
モジュールを試すことができます:http://docs.python.org/library/mimetypes.html。
print mimetypes.guess_type(filename)
幸運:
はここでプレーするものです!
MIMEタイプはファイル名でのみ動作し、内容には影響しません –
ファイルがWebサーバーからダウンロードされた場合は、コンテンツタイプを表示する必要がありますが、ファイルの種類が真に記述されているかどうかにかかわらず、Webサーバーが役に立ちます。
また、ヒューリスティックを使用してファイルの種類を推測することもできます。これは多くの場合、ファイルの最初の数バイトを調べることで行うことができます。
いくつかの答えがすでに示唆したように、あなたはファイルの最初のバイトにのぞくことができは:
#!/usr/bin/env python
# $ cat hello.txt
# Hello World. I'm plaintext.
# $ cat hello.txt | gzip > hello.txt.gz
from struct import unpack
# 1F 8B 08 00/gz magic number
magic = ('\x1f', '\x8b', '\x08', '\x00')
for filename in ['hello.txt', 'hello.txt.gz']:
with open(filename, 'rb') as handle:
s = unpack('cccc', handle.read(4))
if s == magic:
print filename, 'seems gzipped'
else:
print filename, 'seems not gzipped'
# =>
# hello.txt seems not gzipped
# hello.txt.gz seems gzipped
文字列で始まったので、何も解凍する必要はありませんでした。最初の4バイトを確認するためにstr.startswith()を使用して、提供されます。偉大な仕事をしているようだ。ありがとう! – kkeogh
これは質問http://stackoverflow.com/questions/43580/how-to-findに似ています-mime-of-a-file-in-pythonである。 python-magicへのリンクはhttps://github.com/ahupp/python-magicにあります。 –