零基礎也能看懂的python內建csv模組教程

2022-09-24 14:30:29 字數 4068 閱讀 6365

目錄

它是一種檔案格式,一般也被叫做逗號分隔值檔案,可以使用 excel 軟體或者文字文件開啟 。

其中資料字段用半形逗號間隔(也可以使用其它字元),使用 excel 開啟時,逗號會被轉換為分隔符。

csv 檔案是以純文字形式儲存了**資料,並且在相容各個作業系統。

例如下面的文字,在 excel 中就以**的形式存在。

sid,nwww.cppcns.comame,age

10010,橡皮擦,18

10086,髮量迷人的喬喻,19

10000,各位博主,20

下面就對 python 內建模組 csv 的用法進行簡單的說明。

使用csv.reader()讀取 csv 檔案內程式設計客棧容。

hefqi

import csv # 模組匯入

with open('aa.csv', 'r', newline='', encoding='utf-8') as f:

# <_csv.reader object at>

reader = csv.reader(f)

for r in reader:

print(r)

其中csv.reader()方法的原型如下所示:

csv.reader(csvfile, dialect='excel', **fmtparams)

其中的引數csvfile可以是任何物件,但要求該物件是乙個迭代器,所以檔案物件和列表物件都可以傳入,如果是檔案物件,還要求開啟它時攜帶引數newline=''。後面的引數保持預設即可。

第二種方式是使用dictreader類,該類實現的效果與reader()方法一致,也是接收可迭代物件,返回生成器,差異是將返回的結果放到了乙個字典的值內,字典的鍵就是單元格的標題。並且這樣輸出的函式是,不需要單獨處理 csv 的列頭行了。

import csv # 模組匯入

with open('aa.csv', 'r', newline='', encoding='utf-8') as f:

reader = csv.dictreader(f)

for r in reader:

print(r)

輸出內容:

ordereddict([('sid', '10010'), ('name', '橡皮擦'), ('age', '18')])

ordereddict([('sid', '10086'), ('name', '髮量迷人的喬喻'), ('age', '19')])

ordereddict([('sid', '10000'), ('name', '各位博主'), ('age', '20')])

csv 檔案寫入用到的模組方法是csv.writer(),該方法的原型如下:

csv.writer(csvfile, dialect='excel', **fmtparams)

最基本的寫入:

import csv

with open('abc.csv', 'w', newline='') as csvfile:

w = csv.writer(csvfile)

# 寫入列頭

w.writerow(["sid", "name", "age"])

w.writerow(["10010", "橡皮擦", "18"])

w.writerow(["10086", "髮量迷人的喬喻", "18"])

這時如果你在開啟檔案時,缺少了newline='',那寫入 csv 檔案內容之後,會出現多餘的換行。

除此之外,我們寫入 csv 檔案的時候,可以啟用dialect(方言)引數。例如使用|作為列的分隔符。

此時的檔案寫入**寫成下述內容:

class my_dialect(csv.dialect):

lineterminator = '\r\n'

delimiter = ';'

quotechar = '"'

quoting = csv.quote_minimal

with open('abc.csv', 'w', newline='') as csvfile:

w = csv.writer(csvfile, dialect=my_dialect)

# 寫入列頭

w.writerow(["sid", "name", "age"])

w.writerow(["10010", "橡皮擦", "18"])

w.writerow(["10086", "髮量迷人的喬喻", "18"])

上述**定義了乙個新的類my_dialect,並使其繼承csv.dialect類,重寫了其中的部分字段。

delimiter:分隔字元,預設為,;

lineterminator:writer 方法寫入資料時,每行的結尾字元,預設為\r\n;

quotechar:單字元,用於包裹具有特殊字元的字段,例如 定界符,引號字元,換行符,預設是";

quoting:控制 writer 何時生成引號,以程式設計客棧及 reader 何時識別引號,默程式設計客棧認是quote_minimal,其餘幾個值分別是

quote_all(全部加引號),

quote_minimal(特定情況加),

quote_nonnumeric(所有非數字加),

quote_none(都不加);

writer物件的方法說明:

csvwriter.writerow(row):寫入單行;

csvwriter.writerows(rows):寫入多行

import csv # 模組匯入

csv_headers = ['name', 'age']

rows = [('橡皮擦', 18),

('髮量迷人的喬喻', 19),

('各位博主', 20)]

with open('./aa.csv', 'w', encoding='utf-8',newline='') as f:

csv_file = csv.writer(f)

csv_file.writerow(csv_headers) # 寫入頭

csv_file.writerows(rows)

與dictreader類使用方法差不多,還存在乙個dictwriter類,該類將以字段格式寫入csv檔案字段。

import csv

with open('abc.csv', 'w', newline='') as csvfile:

w = csv.dictwriter(csvfile, fieldnames=['sid', 'name', 'age'])

w.writeheader() # 寫入列頭

w.writerow()

w.writerow()

w.writerow()

上述**尤其注意fieldnames引數是必填引數,表示的是列頭,並且在寫入正式資料前,需使用w.writeheader()寫入列頭。

關於 csv 方言,可以使用csv.register_dialect方法將name與dialect關聯起來,核心含義相當於給dialect起了乙個別名。刪除也比較簡單,使用csv.unregister_dialect(name)即可。csv.list_dialects()返回已經註冊的方言名稱,你可以在電腦上做一下測試,檢視 python 環境中提供的幾種方言。

import csv

csv.register_dialect('ca', delimiter='|', quoting=csv.quote_minimal)

with open('abc.csv', 'w', newline='') as csvfile:

w = csv.dictwriter(csvfile, fieldnames=['sid', 'name', 'age'], dialect='ca')

w.writeheader() # 寫入列頭

w.writerow()

w.writerow()

w.writerow()

csv 模組還提供了csv.sniffer類,用於推斷 csv 檔案的格式,其存在兩個方法:

sniff(sample, delimiters=none):分析並返回乙個 dialect 子類,可以分析出格式引數;

has_header(sample):分析 csv 檔案是否存在標題。

沒有配置預設路由 零基礎也能看懂靜態路由

路由器隔離廣播域,不同網段之間不能直接通訊,需要有路由才能進行不同網段之間的訪問。路由器或者三層交換機都會維護路由表,而路由表就是用於指導資料 的表項。以上拓撲中,四台路由器下都有自己的區域網,裝置預設情況下沒有配置路由,在自己裝置直連的介面會在路由表中以直連路由的方式出現。路由表反映的是到達某個目...

小白也能看懂的css基礎(一)

2 選擇器 3 常用的屬性 3.4 背景background 3.5 標籤顯示模式 display 一般少用,不推薦 backgroung color blue 在head標籤內放置,樣式不多時使用 新建檔案寫css樣式,在head內寫link引入html。標籤選擇器 標籤名 id選擇器 id名 i...

小白也能看懂的css基礎(三)

接上文 css基礎 二 解決方法 對img設定display block 調整vertical align 取值 top middle bottom 結合實際來選擇解決方法 ie相容問題 ie8以下瀏覽器背景復合屬性寫法問題 bg url和no repeat之間沒有空格,在ie8以下顯示異常。ie6...