2014-05-09 5 views
1

나는 "\"연산자를 사용하여 파일에 대한 경로의 연결을 구현하고 해당 함수를 재정의하고 싶습니다 (있는 경우). 예를 들어python에 ""에 해당하는 함수가 있습니까?

:

path1 = '\home' 
path2 = 'codes' 

codepath = path1 \ path2 

따라서, STR 추가 "\"방법의 redefition의 경로 1 및 경로 2 사이, I는 pathlib 모듈로 물체들을 연결 용 / 지원 codepath = '\home\codes'

+4

수 없습니다. 백 슬래시가 아니라 표준 유형이 아닙니다. 백 슬래시는 파이썬 표현식에서 줄 연속을 나타내는 데 사용됩니다. '/'와 같은 기존 연산자를 사용할 수 있지만 연산자의 동작을 무시하려면 사용자 정의 유형이 필요합니다. –

+4

'os.path.join ('home', 'codes')'은 어떻습니까? – inspectorG4dget

+0

Python 3.4는 새로운 모듈 ['pathlib'] (https://docs.python.org/dev/library/pathlib.html)을 가지고 있습니다. –

답변

4

주장한다. __div__을 사용하는 방법의 예로서

>>> p = Path('/etc') 
>>> q = p/'init.d'/'reboot' 
>>> q 
PosixPath('/etc/init.d/reboot') 
>>> q.resolve() 
PosixPath('/etc/rc.d/init.d/halt') 

, 여기 str를 확장하는 간단한 클래스입니다. 적어도 하나의 인수가 MyPath의 인스턴스 인 경우 작동해야합니다 (즉, 두 개의 일반 문자열에는 작동하지 않음).

class MyPath(str): 
    def __div__(self, other): 
     assert isinstance(other, str) 
     return os.path.join(self, other) 
    def __rdiv__(self, other): 
     assert isinstance(other, str) 
     return os.path.join(other, self) 

# Using __div__ 
print MyPath("/home/bob")/MyPath("bin") 
print MyPath("/home/bob")/"bin" 

# Using __rdiv__ 
print "/home/bob"/MyPath("bin") 
+0

이것은 설치가 필요하기 때문에 python 2.7에서는 표준이 아닙니다. 파이썬 2.7 표준 moludes와 함께해야합니다. 2.7 네이티브 (호환성을위한 추가 패키지 없음)를 가진 다양한 컴퓨터에서 사용되기 때문입니다. –

+2

그러면'os.path.join'을 사용해야 할 것입니다. 백 슬래시는 아직 시작자가 아니기 때문에 연산자가 아니기 때문에 새로운 구문을 추가 할 수 없습니다. 자신 만의 클래스를 구현하여 파일 경로를 표현하고'__div__'를 사용하여'/'를 사용하도록 정의 할 수 있지만 그 시점에서'pathlib'를 코드로 패키징 할 수 있습니다. – chepner

+0

그것이 해결 방법입니다. 내 클래스에서 연산자 "/"를 사용하고 "div"를 다시 정의합니다. 감사합니다 chep –

관련 문제