prosource

pathlib가 있는 접미사가 이미 있는 경로에 다른 접미사 추가

probook 2023. 5. 3. 21:32
반응형

pathlib가 있는 접미사가 이미 있는 경로에 다른 접미사 추가

나는 몇 가지 오래된 파이썬 코드를 대신 사용하기 위해 변환하고 있었습니다.os.path대부분의 경로 관련 작업의 경우 다음과 같은 문제가 발생했습니다.이미 확장자가 있는 경로에 다른 확장자를 추가해야 했습니다(바꾸기가 아니라).와 함께os.path우리는 단지 문자열을 조작하고 있기 때문에, 해결책은 문자열 연산으로 확장을 추가하는 것이었습니다.

newpath = path + '.res'

사용할 수 없습니다.pathlib.Path임의 문자의 연결을 허용하지 않기 때문입니다.제가 찾을 수 있는 가장 가까운 것은 다음과 같습니다.

newpath = path.with_suffix(path.suffix + '.res')

여전히 마지막에 문자열 추가를 사용하기 때문에 해결 방법으로 보입니다.그리고 처음에는 이미 여러 개의 확장자가 있는 경우를 처리하는 것을 잊어버렸고 사용자가 새 확장자를 추가하려고 하면 이전 동작을 되돌리는 다음 코드가 발생하기 때문에 새로운 함정이 있습니다.

newpath = path.with_suffix(''.join(path.suffixes) + '.res')

이제 순수한 경로 연산 대신 기존 동작을 달성하기 위해 점점 더 많은 문자열 연산을 사용하기 때문에 간결하거나 깨끗하지 않습니다.사실은Path.suffixesexists는 라이브러리의 개발자들이 파일이 여러 개의 확장자를 가질 수 있는 경우를 고려했지만 경로에 새 확장자를 단순히 추가하는 방법을 찾을 수 없었습니다.동일한 행동을 달성하기 위해 내가 놓친 더 관용적인 방법이 있습니까?

편집: 실제로path.with_suffix(path.suffix + '.res')이미 여러 개의 파일 확장자가 있는 경우를 처리하기에 충분합니다. 비록 즉시 명백하지는 않았지만요.

다음은 이미 제공된 답변보다 약간 더 만족스러운 내용입니다.

new_path = path.parent / (path.name + '.suffix')

경로가 내부에서 수정되는 것 같지 않습니다(변경할 수 없습니다)..parts[-1]디렉토리 또는 변경.suffixes등), 하지만 그렇다고 해서 너무 불미스러운 것에 의지할 필요는 없습니다.다음은 제가 원하는 만큼 우아하지 않더라도 괜찮습니다.

new_path = path.with_suffix(path.suffix + new_suffix)

어디에path원래 경로 변수입니다.new_suffix새 접미사/접미사가 있는 문자열입니다(앞에 "." 포함).

그냥 변환할 수 있습니다.Path문자열을 입력한 다음 새 확장자를 추가하고 다시 변환합니다.Path:

from pathlib import Path
first = Path("D:/user/file.xy")
print(first)
second = Path(str(first)+".res")
print(second)

pathlib3x를 사용할 수도 있습니다. Pathlib은 Python 3.11.a0을 작성한 날짜에 최신 Python 3.6 이상용 Python pathlib의 백포트와 다음과 같은 몇 가지 추가 기능을 제공합니다.append_suffix

>>> python -m pip install pathlib3x

>>> import pathlib3x as pathlib

>>> pathlib.Path('some_path').append_suffix('.ext')
PosixPath('some_path.ext')
>>> pathlib.Path('some_path.ext.ext2').append_suffix('.ext3')
PosixPath('some_path.ext.ext2.ext3')


당신은 그것을 github 또는 PyPi에서 찾을 수 있습니다.


고지 사항:저는 pathlib3x 라이브러리의 저자입니다.

임의의 문자열을 사용하여 현재 경로를 확장하는 것이 좋을 것 같습니다.

old_path = Path("/the/old/path.foo")  # "/the/old/path.foo"
new_path = Path(f"{old_path}.bar")    # "/the/old/path.foo.bar"

확장자를 변경하지 않고 파일 이름을 추가하려면 이 작업이 작동합니다.

matfile2 = pathlib.Path.joinpath(matfile.parent, matfile.stem+' insert'+matfile.suffix)

다음 코드는 매우 동적인 방식으로 원하는 작업을 수행해야 합니다.

from pathlib import Path
import time

p = Path('.')
p = p / '..' / 'Python' / 'Files' / 'Texts_to_read' / 'a_text_file'

new_p = str(p).split('\\')

new_suffix = '.txt'

new_p[-1] = new_p[-1] + new_suffix

p = Path('.')

for x in new_p:
    p = p / x

print(new_p)

print(p)
print(str(p))

time.sleep(5)

이 경우 일반적인 문자열 작업을 사용할 수 있다는 것은 많은 종류의 새로운 기능을 필요로 하지 않고도 원하는 파일 경로를 상당히 제어할 수 있다는 점에서 좋은 점입니다.

언급URL : https://stackoverflow.com/questions/49380572/adding-another-suffix-to-a-path-that-already-has-a-suffix-with-pathlib

반응형