如何确定字符串的内容类型

时间:2011-01-20 20:52:14

标签: python string content-type

我收到一些字符串数据。我需要将数据写入文件,但问题是有时数据是压缩/压缩的,有时它只是纯文本。我需要确定内容类型,因此我知道是将其写入.txt文件还是.tgz文件。有关如何实现这一目标的任何想法?即使我的数据是字符串而不是文件,我能以某种方式使用mime类型吗?

感谢。

4 个答案:

答案 0 :(得分:1)

如果从网络服务器下载文件,您应该有一个要查看的内容类型,但无论它是否真正描述了文件的类型,您都可以使用它。

另一种选择是使用启发式来猜测文件类型。这通常可以通过查看文件的前几个字节来完成

答案 1 :(得分:1)

gzip和zip都在压缩数据之前使用不同的标头,而不是人类可读的字符串。如果仅在这些选项之间进行选择,则可以比mimetypes提供更快的检查。

答案 2 :(得分: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

答案 3 :(得分:0)

您可以尝试mimetypes模块:http://docs.python.org/library/mimetypes.html

这是可以玩的东西:

print mimetypes.guess_type(filename)
祝你好运!