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