반응형

pandas의 read_csv 함수에 사용되는 경로 문자열 앞에 r을 붙이는 이유를 다룹니다.

 

2022. 12. 5 최초작성



read_csv 함수에 경로 문자열을 추가시 디렉토리 구분자로 \를 사용할 경우에 문제가 생길 수 있습니다.

디렉토리 이름이 n으로 시작하면 \n이 이스케이프 문자로 인식되어 문제가 되어 다음처럼 에러가 발생합니다.   

import pandas as pd


df = pd.read_csv('.\new\test.csv')

 

Traceback (most recent call last):
  File "d:\code\Python\pandas_read_csv.py", line 4, in <module>
    df = pd.read_csv('.\new\test.csv')
  File "C:\Users\webnautes\miniconda3\envs\python39\lib\site-packages\pandas\util\_decorators.py", line 311, in wrapper
    return func(*args, **kwargs)
  File "C:\Users\webnautes\miniconda3\envs\python39\lib\site-packages\pandas\io\parsers\readers.py", line 680, in read_csv
    return _read(filepath_or_buffer, kwds)
  File "C:\Users\webnautes\miniconda3\envs\python39\lib\site-packages\pandas\io\parsers\readers.py", line 575, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "C:\Users\webnautes\miniconda3\envs\python39\lib\site-packages\pandas\io\parsers\readers.py", line 933, in __init__
    self._engine = self._make_engine(f, self.engine)
  File "C:\Users\webnautes\miniconda3\envs\python39\lib\site-packages\pandas\io\parsers\readers.py", line 1217, in _make_engine
    self.handles = get_handle(  # type: ignore[call-overload]
  File "C:\Users\webnautes\miniconda3\envs\python39\lib\site-packages\pandas\io\common.py", line 789, in get_handle
    handle = open(
OSError: [Errno 22] Invalid argument: '.\new\test.csv'



이 경우 다음처럼 경로 문자열 앞에 r을 추가해주면 문제가 해결됩니다. 에러가 발생하지 않습니다. 

import pandas as pd


df = pd.read_csv(r'.\new\test.csv')



경로 문자열에서 디렉토리 구분자로 /를 사용할 경우에는 r을 적지 않아도 문제가 되지 않습니다. 

import pandas as pd


df = pd.read_csv(r'./new/test.csv')




참고

https://stackoverflow.com/a/42655010/19664020 

 

반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts