파일 이름에서 확장자를 추출하는 기능이 있습니까?
질문자 :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
- 목록 내의 모든 파일 이름 가져오기
- 파일 이름을 분할하고 끝에서 두 번째 확장자를 확인하십시오. pen_ext 목록에 있습니까?
- 그렇다면 마지막 확장자와 결합하고 파일의 확장자로 설정하십시오
- 그렇지 않은 경우 마지막 확장자를 파일 확장자로 넣으십시오.
- 그런 다음 확인하십시오.
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
'etc. > StackOverFlow' 카테고리의 다른 글
GET 매개변수에서 값을 가져오는 방법은 무엇입니까? (0) | 2022.02.15 |
---|---|
Git의 다른 분기에서 변경 사항을 선택적으로 병합하거나 선택하려면 어떻게 해야 합니까? (0) | 2022.02.15 |
LF는 git에서 CRLF로 대체됩니다. - 그게 무엇이며 중요합니까? [복제하다] (0) | 2022.02.08 |
동적 셀 레이아웃 및 가변 행 높이를 위해 UITableView에서 자동 레이아웃 사용 (0) | 2022.02.08 |
pull 중 변경 사항을 위해 Git 병합 충돌 해결 (0) | 2022.02.08 |