python讀寫csv文件的方法(還沒試,先記錄一下)

csv模塊定義瞭如下功能:html

csv.readercsvfiledialect ='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.writercsvfiledialect ='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_dialectname [,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.DictReaderffieldnames = Nonerestkey = Nonerestval = Nonedialect ='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.DictWriterffieldnamesrestval =''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類是依賴於主要用於它的屬性,這是用來定義一個特定的參數的容器類readerwriter實例。

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

1.Python處理csv文件之csv.writer()

複製代碼
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)
複製代碼

運行結果

 

2.Python處理csv文件之csv.reader()

複製代碼
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']]

3.Python處理csv文件之csv.DictWriter()

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)
複製代碼

運行結果

 

4.Python處理csv文件之csv.DictReader()

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
相關文章
相關標籤/搜索