2014-12-03 3 views
0

를 이해하려고 노력하는 것은 여기에서 나는 이것이 어떻게 작동하는지 정확히 이해하고 있는지 확인하기 위해 시도하고 빠른 분석을하고 싶었다 코드CSV 구문 분석은 몇 가지 코드

import csv 


def csv_dict_reader(file_obj): 
    """ 
    read a CSV file using csv.DictReader 
    """ 

    reader = csv.DictReader(file_obj, delimiter=',') 
    for line in reader: 
     print(line['first_name']), 
     print(line['last_name']), 

if __name__== "__main__": 
    with open("dummy.csv") as f_obj: 
     csv_dict_reader(f_obj) 

입니다. 여기에 우리가 간다 :

1) CSV 가져 오기는 인수

3) 독자 변수가에 전화를 만들면서 'file_obj을'걸리는 CSV 방법

2) 우리는 함수를 정의에 제공 함수는 "DictReadre"라는 함수 내에서 "file_obj"에서 인수를 가져와 '구분 기호'를 지정합니다.

4)이 for 루프와 혼동 스럽습니까? 왜 사전에 선을 정의 할 필요가 없습니까? 그 라인은 이미 '리더'의 일부로 정의되어 있습니까? 그것은 '이름'과 '주요'이 어떻게 든 우리가 'file_obj'를 지정하는 방법에 관련된에 관해서

5) 정말 혼란 스러워요? 나는 우리가 결국 'file_obj'를 어떻게 지정하는지 결국 똑같이 혼란 스럽다. 나는 'f_obj'가 어떻게 든이 역할을 수행 할 수 있다고 가정하고 있었다.

--edit--

최고

이 나에게 훨씬 더 이해하기 시작한다. 그래서, DictReader()에 대한 '클래스'호출을 만들 때 변수 'reader'에 인스턴스를 작성하고 있습니까?

어쩌면 나는 너무 멀리 떨어져 있지만, DictReader() 클래스에서 'last_name'또는 'first_name'과 같은 필드의 구조를 결정할 수 있습니까? CSV 파일의 구조와 관련이 있다고 가정하고 있지만 완전히 확신 할 수는 없습니다.

+0

내가이 게시물 튜토리얼 링크를 찾고 당신에게 http://stackoverflow.com/questions/419163/what-does-if-name-main-do –

답변

4

1) CSV 가져 오기는 CSV 방법에 제공

음, 아주; 그것은 csv모듈에서 제공합니다. * 당신이 암시 적으로 부르는 csv.DictReader.__next__ 방법이있는 csv.DictReader클래스을 포함하지만 여기에 중요하지

* ....

2) 우리는 인수 정확히

으로 'file_obj'를받는 함수를 정의합니다. *

* 기술적으로, 인수 및 매개 변수 사이의 구분, 또는 실제 사이에있다 공식적인 주장/매개 변수 대. 당신은 아마 그것을 아직 배우고 싶지 않을 것입니다. 하지만 그렇게하면 형식적인 매개 변수가 함수 정의에 포함됩니다. 실제 인수는 함수 호출로 전달됩니다.

3) 리더 변수이어서, 다시없는 아주 '구분자'

를 'file_obj'로부터 인수를 특정하는 "DictReadre"라는 CSV 내의 함수를 호출한다; 클래스DictReader에 전화를 겁니다. 클래스를 호출하면 해당 클래스의 인스턴스가 생성됩니다. 인수는 함수 호출에서와 같은 방식으로 전달됩니다. DictReader이 가져 오는 매개 변수는 the help에서 찾을 수 있습니다.

* 실제로 클래스를 생성하는 것은 실제로 클래스의 __new__ 메서드를 호출 한 다음 (보통) __init__ 메서드를 호출합니다. 그러나 그것은 새로운 수업을 작성할 때만 중요합니다. 수업을 방금 사용하는 경우 __new__ 또는 __init__은 상관하지 않습니다. 이것이 문서가 표시되는 이유입니다 (예 : class csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)).

4)이 for 루프와 혼동을 느낍니다. 왜 미리 선을 정의 할 필요가 없습니까? 그 라인은 이미 '리더'의 일부로 정의되어 있습니까?

가 아니, 그건 for 문이 똑같이 작업은 다음과 같습니다마다 루프를 통해, linereader에 다음 값에 할당됩니다. The tutorial에 대해 자세히 설명합니다.

더 간단한 예는 도움이 될 수

1 할당
for a in [1, 2, 3]: 
    print(a) 

a에, 다음 2a에가, 다음 3a에, 3 것을 출력 할당 2 것을 출력 할당 1 것을 인쇄, 다 끝났어.

또한 변수를 사용하기 전에 으로 선언되어야하는 다른 언어로 혼동 될 수 있습니다. 파이썬은 그렇게하지 않습니다. 원하는 이름으로 원하는 이름을 지정할 수 있습니다. 이름이있는 변수가 없으면 지금 있습니다. 이 '주' '이름'과

이것은 당신이 뭔가를 합리적으로 조금 일찍 고급 배워야 할 특별한 경우에 있어서는

5) 정말 혼란 스러워요.

동일한 소스 코드 파일을 스크립트로 사용하여 명령 줄에서 실행하고 다른 코드에서 가져올 모듈로 사용할 수 있습니다. 두 가지 방법을 구별하는 방법은 __name__을 확인하는 것입니다. 스크립트로 실행중인 경우 '__main__'이됩니다. 다른 스크립트에 의해 모듈로 사용된다면 모듈 이름이 무엇이든 상관 없습니다.

그래서 공상적으로 모든 공용 클래스와 함수 및 다른 사람에게 유용 할 수있는 상수를 정의한 다음 if __name__ == '__main__':을 수행하고 누군가가 실행될 경우 실행하려는 모든 "최상위 스크립트"코드를 넣습니다 너는 대본으로.

또 다시 the tutorial에 대해 자세히 설명합니다.

+0

도움이 될 것입니다 생각, 난 그냥 공식 튜토리얼하지 않습니다 실현 stdlib와 다른 모듈을 사용하는 방법을 설명하기. 자신의 모듈을 만드는 방법을 설명하고, 스크립트로 실행하고,'sys.path'에 설치하고, 캐시에 .pyc' 파일을 찾으십시오. 주문 ... – abarnert