2014-12-03 51 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以CSV方法

2)我們定義一個函數,該函數「file_obj」作爲它的參數

3)讀者變量進行調用的帶來函數在csv中被稱爲「DictReadre」,後者接受來自'file_obj'的參數並指定一個'delimiter'

4)我對這個for循環感到困惑,爲什麼我們不必事先定義行?它是否已被定義爲「讀者」的一部分?

5)我真的很困惑,當談到「」和「主要」,在這些主題相關的,我們如何指定「file_obj」?我同樣對最後指定'file_obj'的方式感到困惑;我一直假設'f_obj'以某種方式設法填補了這個角色。

- 編輯 -

真棒,這是開始做了一大堆我更有意義。所以,當我對DictReader()進行'class'調用時,我正在變量'reader'中創建它的一個實例?

也許我離得太遠了,但是DictReader()類允許它確定字段的結構,如'last_name'或'first_name'?我假設它與CSV文件的結構有關,但我不完全確定。

+0

我認爲這篇文章將幫助你 http://stackoverflow.com/questions/419163/what-does-if-name-main-do – 2014-12-03 02:41:02

回答

4

1)導入CSV帶來的CSV方法

嘛,不太;它帶來的csv模塊英寸*

* ...其中包括csv.DictReader,裏面有你叫隱式csv.DictReader.__next__方法,但在這裏,這並不重要。

2)我們定義一個函數,該函數 'file_obj' 作爲它的參數

沒錯。*

*從技術上講,有參數和參數之間的區別,或者在實際與形式參數/參數相比較。你可能不想學習。但是如果你這樣做了,形式參數就進入了函數定義;實際的參數進入函數調用。

3)讀取器變量使得爲csv內的功能被稱爲「DictReadre」,其隨後接受參數從「file_obj」和指定「分隔符」

同樣,不太的呼叫;它打電話給DictReader。調用一個類將構造該類的一個實例。參數的傳遞方式與函數調用相同。*通過在the help中查找,可以看到DictReader所需的參數。 *實際上,構建一個類實際上調用類的__new__方法,然後(通常)調用它的__init__方法。但是當你寫新課時,這一點很重要。當你僅僅使用課堂時,你並不關心__new____init__。這就是文檔顯示的原因,例如class csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)

4)我對這個for循環感到困惑,爲什麼我們不必事先定義行?它是否已被定義爲「讀者」的一部分?

不,這正是for報表做的:每一次循環,line被分配到下一個值readerThe tutorial更詳細地解釋。

一個簡單的例子可以幫助:

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

這就賦予1a,打印出的是1,然後分配2a,打印出的是2,然後分配3a,打印出的是3,那麼就完成了。

此外,您可能會被其他語言困惑,需要變量宣佈纔可以使用。 Python不這樣做;你可以指定任何你想要的名字,如果沒有這個名字的變量,現在就有了。

5)我真的很困惑,當談到「名」和「主」

這是你必須學習的東西相當早提前一點點的特殊情況。

相同的源代碼文件可以用作腳本,在命令行上運行,也可以作爲模塊,由其他代碼導入。您區分兩者的方式是檢查__name__。如果您作爲腳本運行,它將是'__main__'。如果您被其他腳本用作模塊,則無論您的模塊名稱如何。因此,您可以習慣性地定義您可能對其他人有用的所有公共類和函數以及常量,然後執行if __name__ == '__main__':並將所有「頂級腳本」代碼放在那裏,如果有人運行你作爲劇本。

再次,the tutorial更詳細地解釋。

+0

尋找教程的鏈接,我才意識到官方教程不解釋如何使用stdlib和其他模塊,直到它解釋瞭如何創建自己的模塊,將它們作爲腳本運行,將它們安裝在sys.path中,並在緩存中找到.pyc文件......這似乎有點出乎意外訂單... – abarnert 2014-12-03 02:54:18