2016-07-25 4 views
-2

사전에 분할해야하는 CSV 파일 데이터로 작업하고 있습니다. 내가 루프의 외부에 사전에 저장되어있는 모든 데이터를 인쇄 할 수없는 몇 가지 이유를 들어Python 3 for 루프 외부에서 사전을 인쇄 할 수 없습니다.

ga_session_data = {} 
ga_pageviews_data = {} 

file = open('files/data.csv', 'r') 

for line in file: 
    page, sessions, pageviews = line.split(',') 
    sessions = int(sessions.strip()) 
    pageviews = int(pageviews.strip()) 
    ga_session_data = {page: sessions} 
    ga_pageviews_data = {page: pageviews}  

file.close() 

print(ga_session_data) 
print(ga_pageviews_data) 

: 나는 다음과 같은 코드를 사용하고 있습니다. 각 행의 첫 행만 인쇄합니다.

+0

첫 줄을 인쇄하지 않습니다. ** 마지막 ** 줄이 인쇄됩니다. –

답변

5

초기, 빈 사전에 아무것도 추가하지 않는 :

ga_session_data = {page: sessions} 
ga_pageviews_data = {page: pageviews}  

합니다. 당신은 새로운 사전에 그들에게 때마다 교체 :

두 개의 새로운 사전의
ga_session_data = {page: sessions} 
ga_pageviews_data = {page: pageviews}  

, 각 키 - 값 쌍. 결국, 파일의 마지막 행이 처리 된 후에 파일의 마지막 행의 정보와 파일이 대체되기 전에 처리 된 모든 정보가 남아 있습니다.

for line in file: 
    page, sessions, pageviews = line.split(',') 
    ga_session_data[page] = int(sessions) 
    ga_pageviews_data[page] = int(pageviews) 

참고 int() 아무튼 '

ga_session_data[page] = sessions 
ga_pageviews_data[page] = pageviews 

당신은 할당 식으로 int() 변환 인라인 수 : 당신이 키에 할당을 사용하여 초기 사전에 추가하고 싶다면

숫자 주위에 여분의 공백을 많이 신경 쓰지 않으므로 str.strip() 호출이 필요하지 않습니다.

다음으로 CSV 판독 바퀴를 다시 발명하지는 않을 것입니다. 사용 csv module :

명시 적으로 더 이상에 file.close()를 호출 할 필요가 없습니다 그래서 나는 또한, 컨텍스트 관리자로 파일 객체를 사용
import csv 

ga_session_data = {} 
ga_pageviews_data = {} 

with open('files/data.csv', 'r') as csvfile: 
    reader = csv.reader(csvfile) 
    for row in reader: 
     page, sessions, pageviews = row 
     ga_session_data[page] = int(sessions) 
     ga_pageviews_data[page] = int(pageviews) 

.

+0

감사합니다. 이번 주 Python을 배우기 시작 했으므로 기본 사항을 알아 내려고했습니다. – user3088202

2

루프를 반복 할 때마다 하나의 항목으로 새 사전을 만듭니다.

for 루프, 변화 안에이 문제를 해결하려면 다음

ga_session_data[page] = sessions 
ga_pageviews_data[page] = pageviews 
3

문제는

전체 사전을 인쇄하고 있습니다. 마지막에 당신이 그냥 마지막 페이지가에 대응 사전을 가지고 있으므로,이 루프의 각 반복 후 새 사전을 생성합니다

ga_session_data = {page: sessions} 
ga_pageviews_data = {page: pageviews} 

: 당신이 사전을 만들 귀하의 문제는 루프에있다 마지막 세션.

솔루션

사용하는 대신 루프 구문 :

ga_session_data = {} 
ga_pageviews_data = {} 
    for line in file: 
     page, sessions, pageviews = line.split(',') 
     sessions = int(sessions.strip()) 
     pageviews = int(pageviews.strip()) 
     ga_session_data[page] = sessions 
     ga_pageviews_data[page] = pageviews 

그리고 이제 코드는 단순히 새로운 하나를 만드는 대신 사전에 추가합니다.이는 사전을 상단에 정의하고 루프 끝에있는 구문이 새 사전을 만들고 이전과 동일한 변수에 할당하는 대신 동일한 사전 내에 새로운 키 - 값 쌍을 작성하기 때문입니다 .

관련 문제