Python/Python

os.path.join 파일 경로 설정하기

Jey78 2022. 10. 19. 00:22

os는 파일들을 작업하는데 있어서 많은 도움들을준다. 특히 그중에서 path.join에 대하여 알아보고자 한다.

우선 들어가기 전에 os를 import 해야한다는 것을 잊지말자.

 

1. 일반적인 경로설정

일반적으로 자신이 원하는 파일의 경로가 있다면

file_path= '/content/drive/MyDrive/Project/korean/'
file_name='output_data.py'
full_path=file_path + file_name

혹은

file_path =  '/content/drive/MyDrive/Project/korean/output_data.py'

위의 경우와 같이 file path와 file name을 구분지어서 설정 후 합하거나 처음부터 모든 경로를 다 입력하여 사용할 것이다.

사실 이렇게만 하더라도 큰 문제는 발생하지 않는다. 

 

2. os.path.join 를 이용한 경로 설정

file_path_01= '/content/drive/MyDrive/Project/korean'
file_name_01='output_data.py'
os.path.join(file_path_01, file_name_01)

이는 두개 이상의 경로에 대하여서 조합해주는 것인데 위의 full_path와 무엇이 다른지 바로 눈에 들어오지는 않는다.

처음의 full_path에 file_paht_01과 file_name_01을 적용시켜보면 이상한 것이 보인다.

>>> full_path=file_path_01 + file_name_01
>>> print(full_path)
'/content/drive/MyDrive/Project/koreanoutput_data.py'

단순히 +를 한다면 슬래쉬(/)가 없다. 그러나 os.path.join을 쓴다면?

>>> print(os.path.join(file_path_01, file_name_01))
'/content/drive/MyDrive/Project/korean/output_data.py'

없던 슬래쉬(/)도 붙여주는 친절함이 보인다. 이미슬래쉬(/)가 있더라도 상관없이 잘 붙여주기 때문에 유용하다

 

3. 응용

os.path.join은 2개 이상의 경로를 조합해준다.

>>>path_01 = '/content/drive/MyDrive'
>>>path_02 = 'Project/korean'
>>>file_name = 'output_data.py'
>>>print(os.path.join(path_01, path_02, file_name))
'/content/drive/MyDrive/Project/korean/output_data.py'

이처럼 3개의 경로를 입력해주더라도 문제없이 이어준다

또한 2번에서 언급한것 처럼 단순히 + 해준다면 '/content/drive/MyDriveProject/koreanoutput_data.py'이 되었을 것이

깔끔하게 합하여진 것을 확인할 수 있다.

 

4.만났던 오류

코랩을 사용하는데 파일이름이 'korean/output_data.csv' 이었을 때 os.path.join을 사용하니  

>>>path_01 = '/content/drive/MyDrive'
>>>path_02 = 'Project'
>>>file_name = 'korean/output_data.csv'
>>>pd.read_csv(os.path.join(path_01, path_02, file_name))

error message = 'FileNotFoundError: [Errno 2] No such file or directory:'

파일을 찾을 수 없다는 메세지를 받게 되었다.

이리 저리 찾아보다 아래와 같이 생각보다 간단하게 해결되었다.

>>>path_01 = '/content/drive/MyDrive'
>>>path_02 = 'Project'
>>>file_name = 'korean/output_data.csv'
>>>pd.read_csv(os.path.join(path_01, path_02, 'korean\output_data.csv'))