반응형
Python : csv.DictReader에서 #으로 표시된 주석 줄을 건너 뜁니다.
csv.DictReader를 사용 하여 CSV 파일을 처리하는 것은 훌륭하지만 주석 줄이있는 CSV 파일 (줄 시작 부분에 해시로 표시됨)이 있습니다. 예를 들면 다음과 같습니다.
# 단계 크기 = 1.61853 val0, val1, val2, 혼성화, 온도, smattr 0.206895,0.797923,0.202077,0.631199,0.368801,0.311052,0.688948,0.597237,0.402763 -169.32,1,1.61853,2.04069e-92,1,0.000906546,0.999093,0.241356,0.758644,0.202382 # 적응 완료
csv 모듈 에는 이러한 줄을 건너 뛸 수있는 방법이 없습니다 .
나는 쉽게 해키를 할 수 있지만 csv.DicReader를 다른 반복기 객체 주위에 감싸는 좋은 방법이 있다고 생각합니다.
실제로 이것은 다음과 잘 작동합니다 filter
.
import csv
fp = open('samples.csv')
rdr = csv.DictReader(filter(lambda row: row[0]!='#', fp))
for row in rdr:
print(row)
fp.close()
좋은 질문이며, Python의 CSV 라이브러리에 기본 주석 처리와 같은 중요한 기능이 부족한 방법에 대한 좋은 예입니다 (CSV 파일 상단에서 드물지 않음). Dan Stowell의 솔루션은 OP의 특정 경우에 적용 #
되지만 첫 번째 기호로 표시되어야 한다는 점에서 제한적입니다 . 보다 일반적인 솔루션은 다음과 같습니다.
def decomment(csvfile):
for row in csvfile:
raw = row.split('#')[0].strip()
if raw: yield raw
with open('dummy.csv') as csvfile:
reader = csv.reader(decomment(csvfile))
for row in reader:
print(row)
예를 들어, 다음 dummy.csv
파일 :
# comment
# comment
a,b,c # comment
1,2,3
10,20,30
# comment
보고
['a', 'b', 'c']
['1', '2', '3']
['10', '20', '30']
물론 이것은 csv.DictReader()
.
CSV 파일을 읽는 또 다른 방법은 pandas
다음은 샘플 코드입니다.
df = pd.read_csv('test.csv',
sep=',', # field separator
comment='#', # comment
index_col=0, # number or label of index column
skipinitialspace=True,
skip_blank_lines=True,
error_bad_lines=False,
warn_bad_lines=True
).sort_index()
print(df)
df.fillna('no value', inplace=True) # replace NaN with 'no value'
print(df)
이 csv 파일의 경우 :
a,b,c,d,e
1,,16,,55#,,65##77
8,77,77,,16#86,18#
#This is a comment
13,19,25,28,82
다음과 같은 결과를 얻을 수 있습니다.
b c d e
a
1 NaN 16 NaN 55
8 77.0 77 NaN 16
13 19.0 25 28.0 82
b c d e
a
1 no value 16 no value 55
8 77 77 no value 16
13 19 25 28 82
참고 URL : https://stackoverflow.com/questions/14158868/python-skip-comment-lines-marked-with-in-csv-dictreader
반응형
'developer tip' 카테고리의 다른 글
함수 내부에서 파이썬 함수의 Docstring을 인쇄하는 방법은 무엇입니까? (0) | 2020.12.05 |
---|---|
캔버스 요소에서 이미지를 가져 와서 img src 태그에서 사용할 수 있습니까? (0) | 2020.12.05 |
로컬로 설치된 경우 관련없는 패키지 (0) | 2020.12.05 |
배우 자체에서 Akka 배우의 이름을 어떻게 얻을 수 있습니까? (0) | 2020.12.05 |
비동기 nodejs 모듈 내보내기 (0) | 2020.12.05 |