目錄
它是一種檔案格式,一般也被叫做逗號分隔值檔案,可以使用 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...