etc./StackOverFlow

Python에서 파일 이름에서 확장자 추출

청렴결백한 만능 재주꾼 2022. 2. 15. 08:48
반응형

질문자 :Alex


파일 이름에서 확장자를 추출하는 기능이 있습니까?



예. os.path.splitext 사용( Python 2.X 문서 또는 Python 3.X 문서 참조 ):

 >>> import os >>> filename, file_extension = os.path.splitext('/path/to/somefile.ext') >>> filename '/path/to/somefile' >>> file_extension '.ext'

대부분의 수동 문자열 분할 시도와 달리 os.path.splitext .c/d 대신 확장자가 없는 /a/bc/d 를 올바르게 처리 .bashrc 를 확장자가 없는 것으로 처리합니다 .bashrc :

 >>> os.path.splitext('/a/bc/d') ('/a/bc/d', '') >>> os.path.splitext('.bashrc') ('.bashrc', '')

nosklo

import os.path extension = os.path.splitext(filename)[1]

Brian Neal

버전 3.4의 새로운 기능.

 import pathlib print(pathlib.Path('yourPath.example').suffix) # '.example'

아직 pathlib 를 언급하지 않았다는 사실에 놀랐습니다 pathlib 는 훌륭합니다!

모든 접미사가 필요한 경우(예: .tar.gz 가 있는 경우) .suffixes 는 접미사 목록을 반환합니다!


jeromej

import os.path extension = os.path.splitext(filename)[1][1:]

점 없이 확장자 텍스트만 가져오려면.


wonzbak

간단한 사용 사례의 경우 점에서 하나의 옵션이 분할될 수 있습니다.

 >>> filename = "example.jpeg" >>> filename.split(".")[-1] 'jpeg'

파일에 확장자가 없을 때 오류 없음:

 >>> "filename".split(".")[-1] 'filename'

하지만 조심해야 합니다.

 >>> "png".split(".")[-1] 'png' # But file doesn't have an extension

또한 Unix 시스템의 숨겨진 파일에서는 작동하지 않습니다.

 >>> ".bashrc".split(".")[-1] 'bashrc' # But this is not an extension

일반적인 사용의 경우 os.path.splitext


Murat Çorlu

거기에 더 낮은 값을 추가할 가치가 있으므로 JPG가 목록에 표시되지 않는 이유가 궁금하지 않습니다.

 os.path.splitext(filename)[1][1:].strip().lower()

blented

pathlib 모듈(python 3.x에서 사용 가능)에서 몇 가지 훌륭한 것을 찾을 수 있습니다.

 import pathlib x = pathlib.PurePosixPath("C:\\Path\\To\\File\\myfile.txt").suffix print(x) # Output '.txt'

r3t40

위의 모든 솔루션이 작동하지만 Linux에서는 일치가 성공하지 못하게 하는 확장 문자열 끝에 줄 바꿈이 있음을 발견했습니다. 마지막에 strip() 메서드를 추가합니다. 예를 들어:

 import os.path extension = os.path.splitext(filename)[1][1:].strip()

yamex5

splitext를 사용하면 이중 확장자를 가진 파일에 문제가 있습니다(예: file.tar.gz , file.tar.bz2 등).

 >>> fileName, fileExtension = os.path.splitext('/path/to/somefile.tar.gz') >>> fileExtension '.gz'

하지만 다음과 같아야 합니다. .tar.gz

가능한 솔루션은 여기


XavierCLL

모든 pathlib suffixes join 하십시오.

 >>> x = 'file/path/archive.tar.gz' >>> y = 'file/path/text.txt' >>> ''.join(pathlib.Path(x).suffixes) '.tar.gz' >>> ''.join(pathlib.Path(y).suffixes) '.txt'

Alex

그것은 오래된 주제이지만이 경우 rpartition이라는 매우 간단한 파이썬 API에 대해 언급하지 않는 이유가 궁금합니다.

주어진 파일 절대 경로의 확장자를 얻으려면 다음을 입력하기만 하면 됩니다.

 filepath.rpartition('.')[-1]

예시:

 path = '/home/jersey/remote/data/test.csv' print path.rpartition('.')[-1]

당신에게 줄 것입니다: 'csv'


weiyixie

놀랍게도 이것은 아직 언급되지 않았습니다.

 import os fn = '/some/path/a.tar.gz' basename = os.path.basename(fn) # os independent Out[] a.tar.gz base = basename.split('.')[0] Out[] a ext = '.'.join(basename.split('.')[1:]) # <-- main part # if you want a leading '.', and if no result `None`: ext = '.' + ext if ext else None Out[] .tar.gz

혜택:

  • 내가 생각할 수있는 모든 것에 대해 예상대로 작동합니다.
  • 모듈 없음
  • 정규식 없음
  • 크로스 플랫폼
  • 쉽게 확장 가능(예: 확장을 위한 선행 점 없음, 확장의 마지막 부분만)

기능으로:

 def get_extension(filename): basename = os.path.basename(filename) # os independent ext = '.'.join(basename.split('.')[1:]) return '.' + ext if ext else None

PascalVKooten

filename split 을 사용할 수 있습니다.

 f_extns = filename.split(".") print ("The extension of the file is : " + repr(f_extns[-1]))

이것은 추가 라이브러리가 필요하지 않습니다


soheshdoshi

filename='ext.tar.gz' extension = filename[filename.rfind('.'):]

staytime

이것은 직접적인 문자열 표현 기술입니다. 언급된 많은 솔루션을 보았지만 대부분이 분할을 보고 있다고 생각합니다. 그러나 Split은 "."가 나타날 때마다 수행합니다. . 당신이 오히려 찾고 싶은 것은 파티션입니다.

 string = "folder/to_path/filename.ext" extension = string.rpartition(".")[-1]

Kenstars

오른쪽 분할이 있는 또 다른 솔루션:

 # to get extension only s = 'test.ext' if '.' in s: ext = s.rsplit('.', 1)[1] # or, to get file name and extension def split_filepath(s): """ get filename and extension from filepath filepath -> (filename, extension) """ if not '.' in s: return (s, '') r = s.rsplit('.', 1) return (r[0], r[1])

Arnaldo P. Figueira Figueira

이 질문에도 이미 답이 나와 있습니다. Regex에 솔루션을 추가하겠습니다.

 >>> import re >>> file_suffix = ".*(\..*)" >>> result = re.search(file_suffix, "somefile.ext") >>> result.group(1) '.ext'

Execuday

정규식을 좋아한다면 진정한 한 줄짜리. 그리고 추가 "."가 있어도 상관 없습니다. 중간에

 import re file_ext = re.search(r"\.([^.]+)$", filename).group(1)

결과는 여기를 참조하십시오: 여기를 클릭하십시오


Victor Wang

이 시도:

 files = ['file.jpeg','file.tar.gz','file.png','file.foo.bar','file.etc'] pen_ext = ['foo', 'tar', 'bar', 'etc'] for file in files: #1 if (file.split(".")[-2] in pen_ext): #2 ext = file.split(".")[-2]+"."+file.split(".")[-1]#3 else: ext = file.split(".")[-1] #4 print (ext) #5
  1. 목록 내의 모든 파일 이름 가져오기
  2. 파일 이름을 분할하고 끝에서 두 번째 확장자를 확인하십시오. pen_ext 목록에 있습니까?
  3. 그렇다면 마지막 확장자와 결합하고 파일의 확장자로 설정하십시오
  4. 그렇지 않은 경우 마지막 확장자를 파일 확장자로 넣으십시오.
  5. 그런 다음 확인하십시오.

Ibnul Husainan

재미를 위해 ... 사전에서 확장자를 수집하고 폴더에서 모든 것을 추적하십시오. 그런 다음 원하는 확장을 가져오기만 하면 됩니다.

 import os search = {} for f in os.listdir(os.getcwd()): fn, fe = os.path.splitext(f) try: search[fe].append(f) except: search[fe]=[f,] extensions = ('.png','.jpg') for ex in extensions: found = search.get(ex,'') if found: print(found)

eatmeimadanish

# try this, it works for anything, any length of extension # eg www.google.com/downloads/file1.gz.rs -> .gz.rs import os.path class LinkChecker: @staticmethod def get_link_extension(link: str)->str: if link is None or link == "": return "" else: paths = os.path.splitext(link) ext = paths[1] new_link = paths[0] if ext != "": return LinkChecker.get_link_extension(new_link) + ext else: return ""

DragonX

이것은 한 줄 에 파일 이름과 확장자를 모두 얻는 가장 간단한 방법 입니다.

 fName, ext = 'C:/folder name/Flower.jpeg'.split('/')[-1].split('.') >>> print(fName) Flower >>> print(ext) jpeg

다른 솔루션과 달리 이를 위해 패키지를 가져올 필요가 없습니다.


Ripon Kumar Saha

def NewFileName(fichier): cpt = 0 fic , *ext = fichier.split('.') ext = '.'.join(ext) while os.path.isfile(fichier): cpt += 1 fichier = '{0}-({1}).{2}'.format(fic, cpt, ext) return fichier

user5535053

a = ".bashrc" b = "text.txt" extension_a = a.split(".") extension_b = b.split(".") print(extension_a[-1]) # bashrc print(extension_b[-1]) # txt

lendoo

name_only=file_name[:filename.index(".")

그러면 가장 일반적인 첫 번째 "."까지 파일 이름이 표시됩니다.


wookie

출처 : http:www.stackoverflow.com/questions/541390/extracting-extension-from-filename-in-python

반응형