3



open() 関数で開かれたファイルを読み取り、ファイルのファイルタイプを返す Python の function() を知っている人はいますか?

例: ASCII TEXT、.TAR FILE、.ZIP FILE、LONG TEXT FILE など。

subprocess モジュールから POPEN を使用し、Linux の「ファイル」プログラムを呼び出すことで、これを行うことができます。

ただし、スクリプトは Windows と Linux で実行されるため、Python 関数を使用してこれを行う必要があります。

誰かが解決策を知っていますか?

どうも!

4

5 に答える 5

5

次のコードを参照してください。

python -c 'import mimetypes; print(mimetypes.guess_type("/tmp/l.py", strict=True))'
('text/x-python', None)
于 2012-05-29T20:27:57.837 に答える
2

mimetypesモジュールを試してください。

mimetypes モジュールは、ファイル名または URL と、ファイル名拡張子に関連付けられた MIME タイプとの間で変換を行います。ファイル名から MIME タイプへの変換、および MIME タイプからファイル名拡張子への変換が提供されます。

于 2012-05-29T20:26:18.997 に答える
2

開業前に拡張子を事前に調べてもらえませんか?このようなアプローチの問題点は、ファイルの種類ごとに異なる方法で判別できることです。たとえば、gzip されたファイルにはヘッダーがある場合とない場合があります。ヘッダーがなければ、ファイルを解凍しようとする以外に、ファイルが gzip されているかどうかを知る実際の方法はありません。それぞれが特定のファイルタイプを探す方法を知っているいくつかのサブメソッドが必要になると思います。例えば、

is_jpeg()
is_tar()
is_gzip()
is_zip()
is_plain()
is_gif
is_fill_in_the_blank()

そして、への呼び出し

get_filetype(fd):
    if is_jpeg(fd):
        return "jpg"
    elif is_tar(fd):
        return "tar"
    """ etc """

例:

def is_png(fd):
    return fd[:4] == '\x89PNG'

def is_jpeg(fd):
    return fd[:3] == '\xFF\xD8\xFF'

def is_tar(fd):
    """examine header bytes, or just try to do it"""
    # check if timestamp is valid
    fd[136:147] == 'a valid timestamp'
    fd[156:157] in ('0', '1', '2')
    # etc

    from tarfile import TarFile, TarError
    from StringIO import StringIO
    io = StringIO(fd)
    try:
        tf = TarFile(fileobj=io)
        return True
    except TarError:
        return False

def is_gzip(fd):
    import zlib
    from StringIO import StringIO
    io = StringIO(fd)
    for i in range(-15, 16):
        try:
            dec = zlib.uncompress(io, i)
            return True
        except:
            pass
    return False

特定のヘッダー バイトの場所を参照し、それらの式を記述できます。

http://en.wikipedia.org/wiki/Zip_(file_format )
http://www.gzip.org/zlib/rfc-gzip.html
http://en.wikipedia.org/wiki/JPEG
http:// en.wikipedia.org/wiki/Gif
http://en.wikipedia.org/wiki/Portable_Network_Graphics
http://en.wikipedia.org/wiki/Tar_(file_format )

于 2012-05-29T20:27:59.763 に答える
1

os.path拡張子を探しているだけですか。

分割テキスト (パス) を使用する

于 2012-05-29T20:27:21.663 に答える
0

「File for Windows」をインストールするだけです: http://gnuwin32.sourceforge.net/packages/file.htm - 「ソースを除く完全なパッケージ」をダウンロードします。「ファイル」パスを /usr/bin/file からインストール先に変更することを忘れないでください。たとえば、C:/"Program Files (x86)"/GnuWin32/bin/file などです。

私はこれを Debian ベースの Django プロジェクトに使用し、Windows に実装しました。これが機能するかどうかを確認するためだけです (面倒な作業の後、機能しました :-) )。

于 2013-03-06T12:19:04.450 に答える