2011-01-20 8 views
2

文字列としてデータを受信しました。データをファイルに書き込む必要がありますが、データが圧縮/圧縮されていることがあり、時には単なるテキストであることがあります。私はコンテンツタイプを決定する必要があるので、それを.txtファイルまたは.tgzファイルに書き込むかどうかを知っています。どのようにこれを達成するための任意のアイデア?私のデータがファイルではなく文字列であっても、何とかMIMEタイプを使用できますか?文字列のコンテンツタイプを特定する方法

ありがとうございました。

+0

これは質問http://stackoverflow.com/questions/43580/how-to-findに似ています-mime-of-a-file-in-pythonである。 python-magicへのリンクはhttps://github.com/ahupp/python-magicにあります。 –

答えて

1

gzipとzipは、圧縮データの前に別々のヘッダーを使用します。選択肢がこれらの間だけである場合、mimetypesよりも速いチェックを行うことができます。

0

mimetypesモジュールを試すことができます:http://docs.python.org/library/mimetypes.html

print mimetypes.guess_type(filename) 

幸運:

はここでプレーするものです!

+1

MIMEタイプはファイル名でのみ動作し、内容には影響しません –

1

ファイルがWebサーバーからダウンロードされた場合は、コンテンツタイプを表示する必要がありますが、ファイルの種類が真に記述されているかどうかにかかわらず、Webサーバーが役に立ちます。

また、ヒューリスティックを使用してファイルの種類を推測することもできます。これは多くの場合、ファイルの最初の数バイトを調べることで行うことができます。

1

いくつかの答えがすでに示唆したように、あなたはファイルの最初のバイトにのぞくことができは:

#!/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 
+0

文字列で始まったので、何も解凍する必要はありませんでした。最初の4バイトを確認するためにstr.startswith()を使用して、提供されます。偉大な仕事をしているようだ。ありがとう! – kkeogh

関連する問題