CSV 형식의 문자열을 배열(리스트)로 변환하는 가장 간단한 방법은 str.split() 메서드를 사용하는 것입니다. 쉼표(,)를 기준으로 문자열을 분리한 뒤, 각 항목에 strip()을 적용하면 앞뒤 공백까지 깔끔하게 제거할 수 있습니다.
>>> s = "1, John Doe, Boston, USA"
>>> print([item.strip() for item in s.split(',')])
['1', 'John Doe', 'Boston', 'USA']
여러 줄의 CSV 문자열 처리하기
문자열에 여러 줄의 CSV 데이터가 담겨 있다면, 먼저 splitlines()로 줄 단위로 나눈 후 각 줄마다 위 과정을 반복하면 됩니다. 리스트 컴프리헨션을 활용하면 한 줄의 코드로 처리할 수 있습니다.
>>> s = "1, John Doe, Boston, USA\n2, Jane Doe, Chicago, USA"
>>> result = [[item.strip() for item in line.split(',')] for line in s.splitlines()]
>>> print(result)
[['1', 'John Doe', 'Boston', 'USA'], ['2', 'Jane Doe', 'Chicago', 'USA']]
csv 모듈의 reader 함수 활용하기
파이썬 표준 라이브러리의 csv 모듈에도 동일한 작업을 수행하는 reader 함수가 있습니다. 따옴표로 묶인 필드나 쉼표가 포함된 값 같은 복잡한 CSV 규칙도 자동으로 처리해 주기 때문에, 실제 데이터를 다룰 때는 이 방법이 더 안전하고 권장됩니다.
>>> import csv
>>> s = "1, John Doe, Boston, USA\n2, Jane Doe, Chicago, USA".splitlines()
>>> x = csv.reader(s)
>>> print(list(x))
[['1', ' John Doe', ' Boston', ' USA'], ['2', ' Jane Doe', ' Chicago', ' USA']]
주의할 점은 csv.reader가 필드의 앞뒤 공백을 자동으로 제거해 주지 않는다는 것입니다. 공백 없는 깔끔한 결과가 필요하다면 아래처럼 각 필드에 strip()을 추가로 적용하면 됩니다.
>>> rows = [[field.strip() for field in row] for row in csv.reader(s)]
>>> print(rows)
[['1', 'John Doe', 'Boston', 'USA'], ['2', 'Jane Doe', 'Chicago', 'USA']]
정리하면, 단순한 문자열이라면 split()과 strip() 조합으로 충분하고, 파일 입출력이나 복잡한 CSV 구조를 다룰 때는 csv 모듈을 사용하는 것이 가장 좋습니다.