該csv
模塊定義瞭如下功能:html
csv.
reader
(csvfile,dialect ='excel',** fmtparams )python
返回一個reader對象,它將迭代給定csvfile中的行。 csvfile能夠是任何支持迭代器協議的對象,並在每次__next__()
調用其方法時返回一個字符串- 文件對象和列表對象都是合適的。若是csvfile是一個文件對象,則應該打開它newline=''
。[1]能夠給出 可選的 方言參數,該參數用於定義特定於CSV方言的一組參數。它能夠是類的子類的實例,也能夠是函數Dialect
返回的字符串之一 list_dialects()
。其餘可選的fmtparams能夠給出關鍵字參數來覆蓋當前方言中的各個格式參數。有關方言和格式參數的完整詳細信息,請參閱「 方言和格式參數」一節。app
從csv文件讀取的每一行都做爲字符串列表返回。除非QUOTE_NONNUMERIC
指定了format選項(在這種狀況下,未加引號的字段將轉換爲浮點數),不然不會執行自動數據類型轉換。函數
一個簡短的用法示例:fetch
>>>spa
>>> import csv >>> with open('eggs.csv', newline='') as csvfile: ... spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') ... for row in spamreader: ... print(', '.join(row)) Spam, Spam, Spam, Spam, Spam, Baked Beans Spam, Lovely Spam, Wonderful Spam
csv.
writer
(csvfile,dialect ='excel',** fmtparams ).net
返回一個編寫器對象,負責將用戶的數據轉換爲給定的類文件對象上的分隔字符串。csvfile能夠是帶有write()
方法的任何對象 。若是csvfile是文件對象,則應使用newline=''
[1]打開它 。 能夠給出可選的方言參數,該參數用於定義特定於CSV方言的一組參數。它能夠是類的子類的實例,也能夠是 函數Dialect
返回的字符串之一list_dialects()
。能夠給出其餘可選的fmtparams關鍵字參數來覆蓋當前方言中的各個格式參數。有關方言和格式參數的完整詳細信息,請參閱部分方言和格式參數。爲了使與實現DB API的模塊接口儘量簡單,將值None
寫爲空字符串。雖然這不是可逆轉換,但它能夠更容易地將SQL NULL數據值轉儲到CSV文件,而無需預處理從cursor.fetch*
調用返回的數據。全部其餘非字符串數據str()
在寫入以前都會進行字符串化。3d
一個簡短的用法示例:unix
import csv with open('eggs.csv', 'w', newline='') as csvfile: spamwriter = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL) spamwriter.writerow(['Spam'] * 5 + ['Baked Beans']) spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
csv.
register_dialect
(name [,dialect [,** fmtparams ] ] )rest
將方言與名稱聯繫起來。 name必須是一個字符串。方言能夠經過傳遞子類Dialect
,或經過fmtparams關鍵字參數或二者來指定,並使用關鍵字參數覆蓋方言的參數。有關方言和格式參數的完整詳細信息,請參閱「 方言和格式參數」一節。
csv.
unregister_dialect
(name)
從方言註冊表中刪除與名稱關聯的方言。Error
若是name不是已註冊的方言名稱,則引起An 。
csv.
get_dialect
(name)
返回與姓名相關的方言。Error
若是name不是已註冊的方言名稱,則引起 An 。此函數返回不可變的 Dialect
。
csv.
list_dialects
()
返回全部已註冊方言的名稱。
csv.
field_size_limit
([ new_limit ] )
返回解析器容許的當前最大字段大小。若是給出new_limit,則這將成爲新限制。
該csv
模塊定義瞭如下類:
class csv.
DictReader
(f,fieldnames = None,restkey = None,restval = None,dialect ='excel',* args,** kwds )
建立一個像常規閱讀器同樣操做的對象,但將每行中的信息映射到OrderedDict
其鍵由可選的fieldnames參數給出。
的字段名的參數是一個序列。若是省略fieldnames,則文件f的第一行中的值將用做字段名。不管字段名如何肯定,有序字典都保留其原始順序。
若是一行包含的字段多於字段名,則將剩餘數據放入一個列表中,並使用restkey指定的字段名(默認爲None
)進行存儲。若是非空行的字段數少於字段名,則缺乏的值將填入None
。
全部其餘可選或關鍵字參數都傳遞給基礎 reader
實例。
在版本3.6中更改:返回的行如今是類型OrderedDict
。
一個簡短的用法示例:
>>>
>>> import csv >>> with open('names.csv', newline='') as csvfile: ... reader = csv.DictReader(csvfile) ... for row in reader: ... print(row['first_name'], row['last_name']) ... Eric Idle John Cleese >>> print(row) OrderedDict([('first_name', 'John'), ('last_name', 'Cleese')])
class csv.
DictWriter
(f,fieldnames,restval ='',extrasaction ='raise',dialect ='excel',* args,** kwds )
建立一個像常規編寫器同樣操做的對象,但將字典映射到輸出行。的字段名的參數是一個sequence
標識,其中在傳遞給字典值的順序按鍵的writerow()
方法被寫入到文件 ˚F。若是字典缺乏字段名中的鍵,則可選的restval參數指定要寫入的值。若是傳遞給方法的字典包含在字段名中找不到的鍵 ,則可選的extrasaction參數指示要採起的操做。若是設置爲, 則引起默認值a 。若是設置爲writerow()
'raise'
ValueError
'ignore'
,字典中的額外值將被忽略。任何其餘可選或關鍵字參數都將傳遞給基礎 writer
實例。
請注意,與DictReader
類不一樣,類的fieldnames參數DictWriter
不是可選的。
一個簡短的用法示例:
import csv with open('names.csv', 'w', newline='') as csvfile: fieldnames = ['first_name', 'last_name'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'}) writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'}) writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})
類csv.
Dialect
的Dialect
類是依賴於主要用於它的屬性,這是用來定義一個特定的參數的容器類reader
或writer
實例。
類csv.
excel
在excel
類定義的Excel生成CSV文件的一般的性質。它以方言名稱註冊'excel'
。
類csv.
excel_tab
所述excel_tab
類定義Excel生成的製表符分隔的文件的一般的性質。它以方言名稱註冊'excel-tab'
。
類csv.
unix_dialect
的unix_dialect
類定義在UNIX系統上,即,使用生成的CSV文件的一般性質'\n'
如線路終端機和引用的全部字段。它以方言名稱註冊'unix'
。
版本3.2中的新功能。
類csv.
Sniffer
本Sniffer
類用來推斷一個CSV文件的格式。
本Sniffer
類提供了兩個方法:
sniff
(樣本,分隔符=無)
分析給定的樣本並返回Dialect
反映找到的參數的子類。若是給出了可選的delimiters參數,則將其解釋爲包含可能的有效分隔符的字符串。
has_header
(樣本)
分析示例文本(假定爲CSV格式), True
若是第一行看起來是一系列列標題,則返回。
使用示例Sniffer
:
with open('example.csv', newline='') as csvfile: dialect = csv.Sniffer().sniff(csvfile.read(1024)) csvfile.seek(0) reader = csv.reader(csvfile, dialect) # ... process CSV file contents here ...
該csv
模塊定義如下常量:
csv.
QUOTE_ALL
指示writer
對象引用全部字段。
csv.
QUOTE_MINIMAL
指示writer
對象只引用那些包含特殊字符,如字段分隔符,quotechar或任何字符lineterminator。
csv.
QUOTE_NONNUMERIC
指示writer
對象引用全部非數字字段。
指示讀者將全部非引用字段轉換爲float類型。
csv.
QUOTE_NONE
指示writer
對象永遠不引用字段。當輸出數據中出現當前 分隔符時,它前面是當前的escapechar 字符。若是未設置escapechar,則Error
在遇到須要轉義的任何字符時,編寫器將引起。
指示reader
不對引號字符執行特殊處理。
該csv
模塊定義瞭如下異常:
異常csv.
Error
檢測到錯誤時由任何功能引起。
參考: https://blog.csdn.net/qq_35892623/article/details/81267182
http://www.javashuo.com/article/p-qtvuckqc-hu.html
import csv def csv_write(path,data): with open(path,'w',encoding='utf-8',newline='') as f: writer = csv.writer(f,dialect='excel') for row in data: writer.writerow(row) return True
data = [ ['Name','Height'], ['Keys','176cm'], ['HongPing','160cm'], ['WenChao','176cm'] ] csv_write('test.csv',data)
def csv_read(path): data = [] with open(path,'r',encoding='utf-8') as f: reader = csv.reader(f,dialect='excel') for row in reader: data.append(row) return data
data = csv_read('test.csv') print(data)
[['Name', 'Height'], ['Keys', '176cm'], ['HongPing', '160cm'], ['WenChao', '176cm']]
def csv_dict_write(path,head,data): with open(path,'w',encoding='utf-8',newline='') as f: writer = csv.DictWriter(f,head) writer.writeheader() writer.writerows(data) return True
head = ['Name','Age'] data = [ {'Name':'Keys', 'Age':28}, {'Name':'HongPing', 'Age':29}, {'Name':'WenChao', 'Age':15} ] csv_dict_write('test2.csv',head,data)
def csv_dict_read(path): with open(path,'r',encoding='utf-8') as f: reader = csv.DictReader(f,dialect='excel') for row in reader: print(row['Name'])
csv_dict_read('test2.csv')
Keys HongPing WenChao