Python에서 쉼표 다음에 공백이 오는 csv를 읽을 때 주의하십시오.

사업

Python에서는 표준 csv 모듈을 사용하여 csv 파일을 쉽게 읽고 쓸 수 있습니다.

예를 들어 다음 csv, sample.csv가 있다고 가정합니다.

11,12,13,14
21,22,23,24
31,32,33,34

이것은 다음과 같이 읽을 수 있습니다.

import csv

with open('data/src/sample.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
# ['11', '12', '13', '14']
# ['21', '22', '23', '24']
# ['31', '32', '33', '34']

여기서 주의해야 할 점은 쉼표 뒤에 공백이 있는 경우입니다. 일반적으로 쉼표 뒤에 불필요한 공백이 없어야 하지만 가끔 공백이 있는 파일을 볼 수 있습니다.

이러한 경우 기본적으로 공백은 무시되지 않고 파일을 있는 그대로 읽습니다.

11, 12, 13, 14
21, 22, 23, 24
31, 32, 33, 34

즉, 위의 파일을 쉼표 다음에 공백으로 읽으면 출력은 다음과 같습니다.

with open('data/src/sample_space.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
# ['11', ' 12', ' 13', ' 14']
# ['21', ' 22', ' 23', ' 24']
# ['31', ' 32', ' 33', ' 34']

csv.reader에 다음을 지정하면 쉼표 뒤의 공백은 건너뜁니다.
skipinitialspace=True

with open('data/src/sample_space.csv', 'r') as f:
    reader = csv.reader(f, skipinitialspace=True)
    for row in reader:
        print(row)
# ['11', '12', '13', '14']
# ['21', '22', '23', '24']
# ['31', '32', '33', '34']

위와 같은 간단한 예에서 strip()을 사용하여 공백을 제거할 수 있습니다. 문제는 다음과 같이 큰따옴표로 묶인 경우입니다.

"one,one", "two,two", "three,three"

큰따옴표로 묶인 부분은 단일 요소로 간주해야 하지만 skipinitialspace=False(기본값)인 경우 다음과 같이 표시됩니다.

with open('data/src/sample_double_quotation.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
# ['one,one', ' "two', 'two"', ' "three', 'three"']

skipinitialspace=True를 설정하여 수행할 수 있습니다.

with open('data/src/sample_double_quotation.csv', 'r') as f:
    reader = csv.reader(f, skipinitialspace=True)
    for row in reader:
        print(row)
# ['one,one', 'two,two', 'three,three']

pandas에서 read_csv()로 csv 파일을 읽을 때도 마찬가지입니다. csv 파일에 쉼표 뒤에 공백이 있으면 다음을 수행할 수 있습니다.
read_csv(skipinitialspace=True)