파일로 가득 찬 폴더가 있는데 확장자가 없습니다. 파일 형식은 어떻게 확인할 수 있습니까? 파일 유형을 확인하고 그에 따라 파일 이름을 변경하고 싶습니다. 함수 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))
어떻게해야합니까?
file types
. gif, png, bmp 또는 jpg인지 결정하는 것을 의미합니까? 텍스트 / 바이너리인지 알고 싶습니까? 실행 가능?
답변:
콘텐츠 (일반적으로 헤더 / 매직 넘버)를 기반으로 파일을 인식 할 수 있고 파일 이름이나 확장자에 의존하지 않는 Python 라이브러리가 있습니다.
다양한 파일 형식을 처리하는 경우 python-magic
. 그것은 잘 확립 된 magic
라이브러리에 대한 파이썬 바인딩 일뿐 입니다. 이것은 좋은 평판과 (작은 보증) 내가 만든 제한된 사용으로 견고했습니다.
더 전문화 된 파일 유형을위한 라이브러리도 있습니다. 예를 들어 Python 표준 라이브러리에는 imghdr
이미지 파일 유형에 대해서만 동일한 작업을 수행하는 모듈이 있습니다.
종속성이없는 (순수 Python) 파일 유형 검사가 필요한 경우 filetype
.
python-magic-win64
Windows에서 나를 위해 일한
파이썬 매직 라이브러리는 당신이 필요로하는 기능을 제공합니다.
pip install python-magic
다음과 같이 라이브러리를 설치 하고 사용할 수 있습니다.
>>> import magic
>>> magic.from_file('iceland.jpg')
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file('iceland.jpg', mime=True)
'image/jpeg'
>>> magic.from_file('greenland.png')
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file('greenland.png', mime=True)
'image/png'
이 경우 Python 코드 는 * NIX 명령 에서 사용하는 것과 동일한 라이브러리 인 libmagic 을 내부적 으로 호출합니다 file
. 따라서 이것은 하위 프로세스 / 쉘 기반 답변과 동일한 작업을 수행하지만 오버 헤드가 없습니다.
import magic
호환되지 않는 내용이 있습니다. 자세한 내용은 stackoverflow.com/a/16203777/3189 를 참조하십시오 .
python-magic
하위 프로세스 접근 방식을 사용하는 것보다 라이브러리를 더 효율적으로 만드는 것은 무엇입니까 ?
file
그렇게 많이했는지 몰랐습니다. # file arc.gif arc.gif: GIF image data, version 89a, 234 x 269
file
명령 을 사용하는 한 가지 이점 은 (대부분?) Linux 배포판에서는 기본이지만 사용하려면 python-magic
먼저 다운로드하여 설치해야한다는 것입니다. 모듈을 사용하는 스크립트가 이식 가능해야하는 경우 다소 문제가됩니다.
이미지의 경우 imghdr
모듈을 사용할 수 있습니다 .
>>> import imghdr
>>> imghdr.what('8e5d7e9d873e2a9db0e31f9dfc11cf47') # You can pass a file name or a file object as first param. See doc for optional 2nd param.
'png'
file
Python에 대한 공식 바인딩을 설치할 수도 file-magic
있습니다 (예 : ctypes를 사용하지 않음 python-magic
).
PyPI에서는 file-magic으로 , Debian에서는 python-magic으로 사용할 수 있습니다. 저에게이 라이브러리는 PyPI와 Debian (그리고 아마도 다른 배포판)에서 사용할 수 있기 때문에 사용하기에 가장 좋으며 소프트웨어 배포 프로세스를 더 쉽게 만듭니다. 나는 그것을 사용하는 방법에 대해서도 블로그에 올렸다 .
import subprocess
p = sub.Popen('file yourfile.txt', stdout=sub.PIPE, stderr=sub.PIPE)
output, errors = p.communicate()
print(output)
Steven이 지적했듯이 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
shlex.split
왜 그냥 실행하지 subprocess.check_output(['file', '--mime-type', filename])
않습니까?
또한이 코드를 사용할 수 있습니다 (헤더 파일의 3 바이트에 의한 순수한 파이썬) :
full_path = os.path.join(MEDIA_ROOT, pathfile)
try:
image_data = open(full_path, "rb").read()
except IOError:
return "Incorrect Request :( !!!"
header_byte = image_data[0:3].encode("hex").lower()
if header_byte == '474946':
return "image/gif"
elif header_byte == '89504e':
return "image/png"
elif header_byte == 'ffd8ff':
return "image/jpeg"
else:
return "binary file"
패키지 설치없이 [및 업데이트 버전]
Linux에서만 작동하지만 "sh"python 모듈을 사용하면 모든 쉘 명령을 간단히 호출 할 수 있습니다.
pip 설치 sh
수입 sh
sh.file ( "/ root / file")
출력 : / root / file : ASCII 텍스트