<질문>
파일명에서 확장자를 추출하는 기능이 있나요?
<답변1>
>>> 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', '')
<답변2>
버전 3.4의 새로운 기능.
import pathlib
print(pathlib.Path('yourPath.example').suffix) # '.example'
print(pathlib.Path("hello/foo.bar.tar.gz").suffixes) # ['.bar', '.tar', '.gz']
print(pathlib.Path('/foo/bar.txt').stem) # 'bar'
아무도 언급하지 않은 것에 놀랐습니다.pathlib
아직,pathlib
굉장해!
<답변3>
import os.path
extension = os.path.splitext(filename)[1]
<답변4>
import os.path
extension = os.path.splitext(filename)[1][1:]
점 없이 확장의 텍스트만 가져오려면.
<답변5>
간단한 사용 사례의 경우 하나의 옵션이 점에서 분리될 수 있습니다.
>>> 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
<답변6>
거기에 더 낮은 값을 추가할 가치가 있으므로 JPG가 목록에 표시되지 않는 이유를 궁금해하지 마십시오.
os.path.splitext(filename)[1][1:].strip().lower()
<답변7>
위의 모든 솔루션이 작동하지만 Linux에서는 일치가 성공하지 못하도록 하는 확장 문자열 끝에 줄 바꿈이 있음을 발견했습니다. 추가strip()
방법을 끝까지. 예를 들어:
import os.path
extension = os.path.splitext(filename)[1][1:].strip()
<답변8>
splitext를 사용하면 이중 확장자를 가진 파일에 문제가 있습니다(예:file.tar.gz
,file.tar.bz2
, 등..)
>>> fileName, fileExtension = os.path.splitext('/path/to/somefile.tar.gz')
>>> fileExtension
'.gz'
그러나 다음과 같아야 합니다..tar.gz
가능한 해결책은 다음과 같습니다.here
<답변9>
pathlib 모듈(python 3.x에서 사용 가능)에서 몇 가지 유용한 정보를 찾을 수 있습니다.
import pathlib
x = pathlib.PurePosixPath("C:\\Path\\To\\File\\myfile.txt").suffix
print(x)
# Output
'.txt'
<답변10>
단지join
모두pathlib suffixes
.
>>> x = 'file/path/archive.tar.gz'
>>> y = 'file/path/text.txt'
>>> ''.join(pathlib.Path(x).suffixes)
'.tar.gz'
>>> ''.join(pathlib.Path(y).suffixes)
'.txt'
<답변11>
오래된 주제이지만 이 경우 rpartition이라는 매우 간단한 파이썬 API를 언급하지 않는 이유가 궁금합니다.
주어진 파일 절대 경로의 확장자를 얻으려면 간단히 다음을 입력하십시오.
filepath.rpartition('.')[-1]
예:
path = '/home/jersey/remote/data/test.csv'
print path.rpartition('.')[-1]
줄 것입니다: 'csv'
<답변12>
이것이 아직 언급되지 않은 것에 놀랐습니다.
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
<답변13>
당신은 사용할 수 있습니다split
에filename
:
f_extns = filename.split(".")
print ("The extension of the file is : " + repr(f_extns[-1]))
추가 라이브러리가 필요하지 않습니다.
<답변14>
filename='ext.tar.gz'
extension = filename[filename.rfind('.'):]
<답변15>
분할 텍스트()함수는 파일 경로를 루트와 확장자의 두 값을 갖는 튜플로 분할합니다.
import os
# unpacking the tuple
file_name, file_extension = os.path.splitext("/Users/Username/abc.txt")
print(file_name)
print(file_extension)
파일 확장자를 얻기 위한 Pathlib 모듈
import pathlib
pathlib.Path("/Users/pankaj/abc.txt").suffix
#output:'.txt'
<답변16>
이 질문에도 이미 답변이 있습니다. Regex에 솔루션을 추가하겠습니다.
>>> import re
>>> file_suffix = ".*(\..*)"
>>> result = re.search(file_suffix, "somefile.ext")
>>> result.group(1)
'.ext'
<답변17>
이것은 직접적인 문자열 표현 기술입니다. 많은 솔루션이 언급되었지만 대부분 분할을 보고 있는 것 같습니다. 그러나 Split은 "."가 나타날 때마다 수행합니다. . 오히려 찾고 싶은 것은 파티션입니다.
string = "folder/to_path/filename.ext"
extension = string.rpartition(".")[-1]
<답변18>
오른쪽 분할이 있는 다른 솔루션:
# 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])
<답변19>
다음 코드를 사용하여 파일 이름과 확장자를 분할할 수 있습니다.
import os.path
filenamewithext = os.path.basename(filepath)
filename, ext = os.path.splitext(filenamewithext)
#print file name
print(filename)
#print file extension
print(ext)
<답변20>
정규식을 좋아한다면 진정한 한 줄입니다. 그리고 추가 "."가 있더라도 상관 없습니다. 중간에
import re
file_ext = re.search(r"\.([^.]+)$", filename).group(1)
결과는 여기를 참조하십시오.Click Here
<답변21>
당신이 사용할 수있는로 끝나다파이썬에서 파일 확장자를 식별하려면
다음과 같은 예
for file in os.listdir():
if file.endswith('.csv'):
df1 =pd.read_csv(file)
frames.append(df1)
result = pd.concat(frames)
<답변22>
음, 내가 늦었다는 걸 알아
그게 내 간단한 해결책이야
file = '/foo/bar/whatever.ext'
extension = file.split('.')[-1]
print(extension)
#output will be ext
<답변23>
이 시도:
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 목록에 있습니까?
- 그렇다면 마지막 확장자와 연결하고 파일의 확장자로 설정하십시오.
- 그렇지 않은 경우 마지막 확장자를 파일 확장자로 넣으십시오.
- 그런 다음 확인하십시오
<답변24>
얻는 가장 쉬운 방법은 사용하는 것입니다.mimtypes, 아래는 예입니다.
import mimetypes
mt = mimetypes.guess_type("file name")
file_extension = mt[0]
print(file_extension)
<답변25>
나는 확실히 파티에 늦었지만 누군가가 다른 라이브러리를 사용하지 않고 이것을 달성하기를 원하는 경우를 대비하여:
file_path = "example_tar.tar.gz"
file_name, file_ext = [file_path if "." not in file_path else file_path.split(".")[0], "" if "." not in file_path else file_path[file_path.find(".") + 1:]]
print(file_name, file_ext)
두 번째 줄은 기본적으로 다음 코드이지만 한 줄로 채워져 있습니다.
def name_and_ext(file_path):
if "." not in file_path:
file_name = file_path
else:
file_name = file_path.split(".")[0]
if "." not in file_path:
file_ext = ""
else:
file_ext = file_path[file_path.find(".") + 1:]
return [file_name, file_ext]
이것이 작동하더라도 모든 유형의 파일, 특히 작동하지 않을 수 있습니다..zshrc
, 나는 사용을 권장합니다os
'에스os.path.splitext
기능, 아래 예:
import os
file_path = "example.tar.gz"
file_name, file_ext = os.path.splitext(file_path)
print(file_name, file_ext)
건배 :)
<답변26>
재미를 위해 ... 확장명을 사전에 수집하고 폴더에서 모두 추적하십시오. 그런 다음 원하는 확장 프로그램을 끌어오세요.
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)
<답변27>
이 방법에는 사전, 목록 또는 집합이 필요합니다. 내장 문자열 메서드를 사용하여 ".endswith"를 사용할 수 있습니다. 이렇게 하면 파일 끝의 목록에서 이름을 검색하고 다음과 같이 수행할 수 있습니다.str.endswith(fileName[index])
. 이것은 확장을 가져오고 비교하기 위한 것입니다.
https://docs.python.org/3/library/stdtypes.html#string-methods
예 1:
dictonary = {0:".tar.gz", 1:".txt", 2:".exe", 3:".js", 4:".java", 5:".python", 6:".ruby",7:".c", 8:".bash", 9:".ps1", 10:".html", 11:".html5", 12:".css", 13:".json", 14:".abc"}
for x in dictonary.values():
str = "file" + x
str.endswith(x, str.index("."), len(str))
예 2:
set1 = {".tar.gz", ".txt", ".exe", ".js", ".java", ".python", ".ruby", ".c", ".bash", ".ps1", ".html", ".html5", ".css", ".json", ".abc"}
for x in set1:
str = "file" + x
str.endswith(x, str.index("."), len(str))
예 3:
fileName = [".tar.gz", ".txt", ".exe", ".js", ".java", ".python", ".ruby", ".c", ".bash", ".ps1", ".html", ".html5", ".css", ".json", ".abc"];
for x in range(0, len(fileName)):
str = "file" + fileName[x]
str.endswith(fileName[x], str.index("."), len(str))
예 4
fileName = [".tar.gz", ".txt", ".exe", ".js", ".java", ".python", ".ruby", ".c", ".bash", ".ps1", ".html", ".html5", ".css", ".json", ".abc"];
str = "file.txt"
str.endswith(fileName[1], str.index("."), len(str))
실시예 8
fileName = [".tar.gz", ".txt", ".exe", ".js", ".java", ".python", ".ruby", ".c", ".bash", ".ps1", ".html", ".html5", ".css", ".json", ".abc"];
exts = []
str = "file.txt"
for x in range(0, len(x)):
if str.endswith(fileName[1]) == 1:
exts += [x]
<답변28>
여기에서 마지막 파일 확장자가 여러 개인 경우 추출하려면
class functions:
def listdir(self, filepath):
return os.listdir(filepath)
func = functions()
os.chdir("C:\\Users\Asus-pc\Downloads") #absolute path, change this to your directory
current_dir = os.getcwd()
for i in range(len(func.listdir(current_dir))): #i is set to numbers of files and directories on path directory
if os.path.isfile((func.listdir(current_dir))[i]): #check if it is a file
fileName = func.listdir(current_dir)[i] #put the current filename into a variable
rev_fileName = fileName[::-1] #reverse the filename
currentFileExtension = rev_fileName[:rev_fileName.index('.')][::-1] #extract from beginning until before .
print(currentFileExtension) #output can be mp3,pdf,ini,exe, depends on the file on your absolute directory
출력은 mp3이며 확장자 이름이 1개뿐인 경우에도 작동합니다.
<답변29>
# 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 ""
<답변30>
a = ".bashrc"
b = "text.txt"
extension_a = a.split(".")
extension_b = b.split(".")
print(extension_a[-1]) # bashrc
print(extension_b[-1]) # txt
'개발 > Python' 카테고리의 다른 글
[파이썬] datetime 간의 시차를 구하는 방법 (0) | 2023.08.11 |
---|---|
[파이썬] 키를 누를때까지 기다리는 방법 (0) | 2023.08.11 |
[파이썬] 문자의 ASCII 값을 얻는 방법 (0) | 2023.08.11 |
[파이썬] '이진 문자열'을 '일반 문자열'로 변환하는 방법 (0) | 2023.01.22 |