코딩 스쿨에 오신것을 환영합니다~~

질의응답 게시판

 
파이썬 기초 p366 (제주) 가장 비가 많이 오는 월은? 관련 질문입니다
벅 * | 2021-10-29
▷ 첨부파일 : p366.ipynb (11437 Byte)      [저장]

소스를 줄여보고 싶어서 보내드린 첨부파일의 처음 방식으로 해보았습니다. 
처음건 다 완성한건 아니고 일단 월별로 내용이 출력이 되어야 다음단계를 코딩할텐데 1월것만 출력되고 나머지는 안되네요. 그래서 다른 방법(두번째)으로 해보았는데 이건 되네요. 첫번째 것도 제가 봐서는 잘못된것이 없는것 같은데 왜 안되는 걸까요ㅠㅠ

  • 관 * 자
  • 2021-10-29 (14:52)
다음은 보내주신 첫번째 소스입니다.

import csv

f=open('jeju_2019.csv','r',encoding='utf-8')
lines=csv.reader(f)
header=next(lines)

for month in range (1,13):
    print ('<%d월>' % month)
    for line in lines:
        print(line)
        if int(line[2][5:7])==month:
            print (line)
       
f.close()

첫번째 for루프테엇 month 1~12의 값을 가집니다.
내부 for문에서 사용된 lines는 CSV 파일에서 읽어드린 것은 리스트와 같은 데이터가 아니라 버퍼와 같은 것입니다. 따라서 lines는 한번 for문으로 데이터를 읽으면 비어버리게 됩니다. 따라서 위와 같이하려면 CSV 파일에서 읽어들인 버퍼에 데이터를 리스트에 담은 다음 처리하면 됩니다.

다음의 소스를 실행해보시면 원하시는 대로 동작할거예요.
-----------------------------------------------------------------
import csv

f=open('jeju_2019.csv','r',encoding='utf-8')
lines=csv.reader(f)
header=next(lines)

data = []

for line in lines:
    data.append(line)
    
for month in range (1,13):
    print ('<%d월>' % month)
    for x in data:
        if int(x[2][5:7])==month:
            print (x)
       
f.close()
  • 벅 *
  • 2021-10-31 (00:45)
감사합니다. 잘 이해했습니다 ^^