Python에서 pathlib가 있는 파일 복사
나는 파일을 복사하려고 한다.pathlib
import pathlib
import shutil
my_file=pathlib.Path('/etc/hosts')
to_file=pathlib.Path('/tmp/foo')
shutil.copy(my_file, to_file)
이 예외는 다음과 같다.
/home/foo_egs_d/bin/python /home/foo_egs_d/src/test-pathlib-copy.py
Traceback (most recent call last):
File "/home/foo_egs_d/src/test-pathlib-copy.py", line 6, in <module>
shutil.copy(my_file, to_file)
File "/usr/lib/python2.7/shutil.py", line 117, in copy
if os.path.isdir(dst):
File "/home/foo_egs_d/lib/python2.7/genericpath.py", line 41, in isdir
st = os.stat(s)
TypeError: coercing to Unicode: need string or buffer, PosixPath found
Process finished with exit code
... Python 2.7에서 pathlib로 파일을 복사하는 방법?
사용 방법:
import pathlib
import shutil
my_file = pathlib.Path('/etc/hosts')
to_file = pathlib.Path('/tmp/foo')
shutil.copy(str(my_file), str(to_file)) # For Python <= 3.7.
shutil.copy(my_file, to_file) # For Python 3.8+.
는 이다.pathlib.Path
a를 창조하다.PosixPath
유닉스/리눅스를 사용하는 경우WindowsPath
Microsoft Windows(윈도우)를 사용하는 경우
파이썬의 eye전o는shutil.copy
인수로 문자열을 필요로 한다.그들을 위해,str
여기서 기능하다
님의 인기에 .shutil.copy()
하지 않는 동동물은 파이썬, 파이썬 3.6 을 것이다.shutil.copy()
감당할 수 있다Path
물체(또는 그 하위 분류)이전 버전의 Python에서 오류가 발생하는 이유는shutil
문자열 인수를 기대copy
, 그리고 그렇지 않다.pathlib.Path
타이프식 논쟁
실제로 쓰기를 원하는 것은 다음과 같다.
my_file.copy(to_file)
하위 클래스 Path를 사용하여 이러한 메서드를 포함시키고my_file
. 기존 제품에 접목/원키패치/덕퍼치하는 것이 더 쉽다는 것을 알게 되었다.pathlib.Path
from pathlib import Path
def _copy(self, target):
import shutil
assert self.is_file()
shutil.copy(str(self), str(target)) # str() only there for Python < (3, 6)
Path.copy = _copy
이 코드를 호출하기 전에 실행하기만 하면 어디든 이 코드를 넣을 수 있다..copy
관한 어느 한 방법.Path
예시에 대한 주장..copy()
파일이나 디렉토리가 될 수 있다.
3.부터 Python 3.5를 가성기(가성기)shutil
, 수행할 수 있는 작업:
from pathlib import Path
dest = Path('dest')
src = Path('src')
dest.write_bytes(src.read_bytes()) #for binary files
dest.write_text(src.read_text()) #for text files
Python 2.7에 대해, 는read_bytes
read_text
write_bytes
그리고write_text
방법들
파일은 메모리에 로드되므로 이 방법은 컴퓨터 사용 가능한 메모리보다 큰 파일에는 적합하지 않다.
코멘트에 따르면 다음과 같이 사용할 수 있다.write_bytes
그리고read_bytes
텍스트 파일을 복사하지만 복사 시 인코딩을 처리해야 하는 경우write_text
a의read_text
다음과 같은 두 가지 추가 매개변수의 장점을 제시한다.
encoding
파일을 디코딩하거나 인코딩하는 데 사용되는 인코딩의 이름errors
인코딩 및 디코딩 오류를 처리하는 방법을 지정하는 선택적 문자열
그들 둘은 모두 의와 같은 뜻을 같이하다
어떻게shutil
수긍하도록 개종되었다.pathlib.Path
Python 3.6의 객체
이 답변에서 언급한 바와 같이 Python 3.6의 Shutil은pathlib.Path
물건들
이것이 꽤 마법을 느꼈기 때문에, 나는 이 마법을 내 수업 시간에 재사용할 수 있을지 알아보기 위해 어떻게 구현되었는지에 대해 조금 더 조사해 보기로 했다.
그 개선은 PEP 519의 결과였다.
이는 많은 stdlib 기능을 일반화하였으며, 문서화는 대부분의 기능을 포함하여 결과적으로 일관성 있게 업데이트되지 않았다.shutil
3.7년 현재 단일 함수로만 지원되는 문서.역동적인 타이핑의 즐거움을 환영한다.
문서화된 경우 stlib는 "경로 유사 객체"에 대한 용어집에 연결된다.
파일 시스템 경로를 나타내는 개체.경로와 유사한 객체는 경로를 나타내는 스트리트 또는 바이트 객체 또는 OS를 구현하는 객체 중 하나이다.PathLike 프로토콜.OS를 지원하는 개체.pathLike 프로토콜은 os.fspath() 함수를 호출하여 str 또는 바이트 파일 시스템 경로로 변환할 수 있으며, os.fsdecode() 및 os.fsencode()를 사용하여 str 또는 바이트 결과를 각각 보장할 수 있다.PEP 519에 의해 소개됨.
그리고 다음 링크를 다음 문서에 연결하십시오.
파일 시스템 경로를 나타내는 개체의 추상 기본 클래스(예: pathlib)퓨어패스.
버전 3.6의 새로운 기능.
abstractmethod __fspath__()
개체의 파일 시스템 경로 표현을 반환하십시오.
메소드는 str 또는 바이트 객체만 반환해야 하며, 기본 설정은 str에 대한 것이다.
주요 이행 약속은 다음과 같다.
- 3f9183b5aca568867f37c38501fca639111580c66으로 기본적으로 가장 낮은 수준의 경로 조작 지점을 변경
Modules/posixmodule.c
- 568be63248614a2cdd7666a67ddddf16e817f7db9가 추가됨
__fspath__
로pathlib.PurePath
자신의 경로와 같은 클래스를 구현하려면 다음과 같이 하십시오.
#!/usr/bin/env python3
class MyPath:
def __init__(self, path):
self.path = path
def __fspath__(self):
return self.path
with open(MyPath('f'), 'w'):
pass
Python 3.6.7, Ubuntu 18.10에서 시험했다.
pathlib3x를 사용할 수 있음 - Python 3.6 이상용 최신(Python 3.10.a0) Python pathlib의 백포트와 다음과 같은 몇 가지 추가 기능을 제공한다.copy
,copy2
, 등등...
$> python -m pip install pathlib3x
$> python
>>> import pathlib3x as pathlib
>>> my_file = pathlib.Path('/etc/hosts')
>>> to_file = pathlib.Path('/tmp/foo')
>>> my_file.copy(to_file)
당신은 그것을 Github나 PyPi에서 찾을 수 있다.
고지 사항:나는 pathlib3x 라이브러리의 작가다.
다음 대신 이름 바꾸기 방법을 사용할 수 있다.shutil.move()
.
import pathlib
my_file = pathlib.Path('/etc/hosts')
to_file = pathlib.Path('/tmp/foo')
my_file.rename(to_file)
참조URL: https://stackoverflow.com/questions/33625931/copy-file-with-pathlib-in-python
'IT이야기' 카테고리의 다른 글
조작을 위해 vuex 상태의 데이터를 로컬 데이터로 가져오는 방법 (0) | 2022.03.26 |
---|---|
반응 후크가 있는 Redex 작업 대기 중 (0) | 2022.03.26 |
기존 Asp에 형식 지정자를 추가하는 방법Net MVC 프로젝트? (0) | 2022.03.26 |
VueJ의 구성 요소 템플릿에서 Vuetify 대화 상자 열기s (0) | 2022.03.26 |
라우터 v4 기본 페이지 반응(찾을 수 없음 페이지) (0) | 2022.03.26 |