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

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

谢谢。


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


如果文件是从网络服务器下载的,则应该有一个内容类型来查看,但无论您是否真正描述文件的类型,您都会受到网络服务器的支配。

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


正如已经提出的一些答案,你可以看到文件的第一个字节:

#!/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
链接地址: http://www.djcxy.com/p/46815.html

上一篇: How to determine content type of a string

下一篇: magic module' object has no attribute 'open'