ファイルでいっぱいのフォルダーがあり、拡張子がありません。ファイルの種類を確認するにはどうすればよいですか? ファイルの種類を確認し、それに応じてファイル名を変更したい。関数filetype(x)
が のようなファイル タイプを返すとしますpng
。私はこれをしたい:
files = os.listdir(".")
for f in files:
os.rename(f, f+filetype(f))
どうすればいいですか?
ファイルでいっぱいのフォルダーがあり、拡張子がありません。ファイルの種類を確認するにはどうすればよいですか? ファイルの種類を確認し、それに応じてファイル名を変更したい。関数filetype(x)
が のようなファイル タイプを返すとしますpng
。私はこれをしたい:
files = os.listdir(".")
for f in files:
os.rename(f, f+filetype(f))
どうすればいいですか?
ファイルの内容 (通常はヘッダー/マジック ナンバー) に基づいてファイルを認識でき、ファイル名や拡張子に依存しない Python ライブラリがあります。
多くの異なるファイル タイプに対処している場合は、python-magic
. magic
これは、確立されたライブラリの単なる Python バインディングです。これは評判が良く、(小さな裏書)私が作った限られた用途では、しっかりしています.
より特殊なファイル タイプ用のライブラリもあります。たとえば、Python 標準ライブラリには、imghdr
画像ファイル タイプに対してのみ同じことを行うモジュールがあります。
依存関係のない (純粋な Python) ファイル タイプ チェックが必要な場合は、 を参照してくださいfiletype
。
UNIX と Linux には、file
ファイルの種類を推測するコマンドがあります。Windows ポートもあります。
マニュアルページから:
File は、各引数を分類するために各引数をテストします。ファイルシステム テスト、マジック ナンバー テスト、言語テストの 3 つのテスト セットがこの順序で実行されます。成功した最初のテストにより、ファイルの種類が出力されます。
file
モジュールでコマンドを実行しsubprocess
、結果を解析して拡張機能を特定する必要があります。
編集: 私の答えを無視してください。代わりにChris Johnson の回答を使用してください。
と呼ばれるライブラリである Pythonの公式file
バインディングをインストールすることもできますfile-magic
(これは のような ctypes を使用しませんpython-magic
)。
PyPI ではfile-magicとして、Debian ではpython-magicとして利用できます。私にとって、このライブラリは PyPI と Debian (およびおそらく他のディストリビューション) で利用できるため、使用するのに最適であり、ソフトウェアの展開プロセスが容易になります。使い方についてもブログに書いています。
import subprocess as sub
p = sub.Popen('file yourfile.txt', stdout=sub.PIPE, stderr=sub.PIPE)
output, errors = p.communicate()
print(output)
スティーブンが指摘したように、subprocess
それが道です。この投稿が言ったように、上記の方法でコマンド出力を取得できます
新しいサブプロセス ライブラリでは、次のコードを使用できるようになりました (* nix のみのソリューション)。
import subprocess
import shlex
filename = 'your_file'
cmd = shlex.split('file --mime-type {0}'.format(filename))
result = subprocess.check_output(cmd)
mime_type = result.split()[-1]
print mime_type