답변:
예. 사용하십시오 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
올바르게 처리 /a/b.c/d
하고 확장 대신 확장 이없는 것으로 .c/d
취급 .bashrc
합니다 .bashrc
.
>>> os.path.splitext('/a/b.c/d')
('/a/b.c/d', '')
>>> os.path.splitext('.bashrc')
('.bashrc', '')
endswith()
보다 휴대용 및 파이썬하지?
.asd
그 확장은 정말 확장입니다 !! 생각해 foo.tar.gz
보면 gzip 압축 파일 ( .gz
)이며 tar 파일 ( .tar
)입니다. 그러나 처음 에는 gzip 파일 입니다. 나는 그것이 이중 확장을 전혀 반환하지 않을 것이라고 생각합니다.
splittext
. 그들은 단지이 이름의 부분 사이의 휴식을 의미하는 무엇이든 할 것입니다 경우가 있다고 인식하기가 훨씬 쉬울 것 splitExt
나 split_ext
. 분명히 내가이 실수를 한 유일한 사람이 될 수 없습니까?
os.path.splitext('somefile.ext')
=> ('somefile', '.ext')
. 타사 라이브러리를 참조하지 않고 실제 카운터 예제를 제공하십시오.
import os.path
extension = os.path.splitext(filename)[1]
import os.path
대신에 from os import path
?
from os import path
하는 경우 이름 path
이 로컬 범위에서 사용되며 코드를 보는 다른 사람들도 경로가 os 모듈의 경로임을 즉시 알 수 없습니다. 마치 마치 사용 import os.path
하는 것처럼 os
네임 스페이스 내에 유지 하고 전화를 걸면 사람들 path()
이 os
모듈 에서 보낸 것임을 즉시 알 수 있습니다.
_, extension = os.path.splitext(filename)
이 훨씬 더 멋지게 보입니다.
if check_for_gzip and os.path.splitext(filename)[1] == '.gz':
버전 3.4의 새로운 기능.
import pathlib
print(pathlib.Path('yourPath.example').suffix) # '.example'
pathlib
아직 아무도 언급 하지 않은 것이 놀랍습니다 pathlib
.
접미사가 모두 필요한 경우 (예 :가있는 경우 .tar.gz
) .suffixes
해당 목록을 반환합니다.
''.join(pathlib.Path('somedir/file.tar.gz').suffixes)
.suffixes[-2:]
.tar.gz 만 가져야합니다 .
하나의 옵션이 점에서 분리 될 수 있습니다.
>>> filename = "example.jpeg"
>>> filename.split(".")[-1]
'jpeg'
파일 확장자가 없으면 오류가 없습니다.
>>> "filename".split(".")[-1]
'filename'
그러나 조심해야합니다.
>>> "png".split(".")[-1]
'png' # But file doesn't have an extension
"my.file.name.js".split('.') => ['my','file','name','js]
['file', 'tar', 'gz']
와 'file.tar.gz'.split('.')
대 ['file.tar', 'gz']
와 'file.tar.gz'.rsplit('.', 1)
. 그래
위의 모든 솔루션이 작동하지만 Linux에서는 확장 문자열 끝에 줄 바꿈이있어 일치하는 것을 막을 수 있습니다. strip()
끝에 메소드를 추가하십시오 . 예를 들면 다음과 같습니다.
import os.path
extension = os.path.splitext(filename)[1][1:].strip()
[1:]
in .splittext(filename)[1][1:]
)-미리 감사드립니다
splittext()
(당신이 문자열 사용을 분할하는 경우가 달리 '.')을 포함 '.' 확장명의 문자. 추가 [1:]
로 제거합니다.
splitext 이중 확장자를 가진 파일에 문제가 있습니다 (예를 들어 file.tar.gz
, file.tar.bz2
등 ..)
>>> fileName, fileExtension = os.path.splitext('/path/to/somefile.tar.gz')
>>> fileExtension
'.gz'
하지만 다음과 같아야합니다. .tar.gz
gunzip somefile.tar.gz
출력 파일 이름은 무엇입니까?
그것은 오래된 주제이지만, 왜이 경우 rpartition이라는 매우 간단한 파이썬 API가 언급되지 않는지 궁금합니다.
주어진 파일 절대 경로의 확장자를 얻으려면 간단히 다음을 입력하십시오.
filepath.rpartition('.')[-1]
예:
path = '/home/jersey/remote/data/test.csv'
print path.rpartition('.')[-1]
당신에게 줄 것이다 : 'csv'
("string before the right-most occurrence of the separator", "the separator itself", "the rest of the string")
. 구분 기호가 없으면 반환 된 튜플은 다음과 같습니다 ("", "", "the original string")
.
아직 언급되지 않은 것에 놀랐습니다.
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
[-1]
그때로 변경하십시오 .
당신은 사용할 수 있습니다 split
A의를 filename
:
f_extns = filename.split(".")
print ("The extension of the file is : " + repr(f_extns[-1]))
추가 라이브러리가 필요하지 않습니다
올바른 분할을 가진 또 다른 솔루션 :
# 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])
funsies의 경우 ... 단지 dict에서 확장을 수집하고 폴더에서 모든 확장을 추적하십시오. 그런 다음 원하는 확장을 당기십시오.
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)
이 시도:
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
foo.tar
유효한 파일 이름입니다. 코드에서 던지면 어떻게됩니까? 무엇에 대해 .bashrc
나 foo
? 이런 이유로 라이브러리 기능이 있습니다 ...
# try this, it works for anything, any length of extension
# e.g 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 ""
name_only=file_name[:filename.index(".")
그러면 가장 일반적인 첫 번째 "."까지 파일 이름이 제공됩니다.
file.name.ext
basename
여기에 약간 혼란 스러울os.path.basename("/path/to/somefile.ext")
것입니다"somefile.ext"