CSV模塊的使用

CSV模塊的使用

1、csv簡介

CSV (Comma Separated Values),即逗號分隔值(也稱字符分隔值,因為分隔符可以不是逗號),是一種常用的文本

格式,用以存儲表格數據,包括數字或者字符。很多程序在處理數據時都會碰到csv這種格式的文件,它的使用是比

較廣泛的(Kaggle上一些題目提供的數據就是csv格式),csv雖然使用廣泛,但卻沒有通用的標準,所以在處理csv

格式時常常會碰到麻煩,幸好python內置了csv模塊。下面簡單介紹csv模塊中最常用的一些函數。

?

更多內容請參考:https://docs.python.org/2/library/csv.html#module-csv

2、csv模塊中的函數

  • reader(csvfile, dialect='excel', **fmtparams)
參數說明:
csvfile,必須是支持迭代(Iterator)的對象,可以是文件(file)對象或者列表(list)對象,如果是文件對
象,打開時需要加"b"標志參數。
dialect,編碼風格,默認為excel的風格,也就是用逗號(,)分隔,dialect方式也支持自定義,通過調用register_dialect方法來注冊,下文會提到。
fmtparam,格式化參數,用來覆蓋之前dialect對象指定的編碼風格。
    import csv  with open('test.csv','rb') as myFile: lines=csv.reader(myFile) for line in lines: print line 

?

'test.csv'是文件名,‘rb’中的r表示“讀”模式,因為是文件對象,所以加‘b’。open()返回了一個文件對象

myFile,reader(myFile)只傳入了第一個參數,另外兩個參數采用缺省值,即以excel風格讀入。reader()返回一個

reader對象lines,lines是一個list,當調用它的方法lines.next()時,會返回一個string。上面程序的效果是將csv

文件中的文本按行打印,每一行的元素都是以逗號分隔符','分隔得來。

?

在我的test.csv文件中,存儲的數據如圖:

程序輸出:

['1', '2'] ['3', 'a'] ['4', 'b']

?

補充:reader對象還提供一些方法:line_num、dialect、next()

  • writer(csvfile, dialect='excel', **fmtparams)

參數的意義同上,這里不贅述,直接上例程:

復制代碼
    with open('t.csv','wb') as myFile: myWriter=csv.writer(myFile) myWriter.writerow([7,'g']) myWriter.writerow([8,'h']) myList=[[1,2,3],[4,5,6]] myWriter.writerows(myList) 
復制代碼

?

'w'表示寫模式。

首先open()函數打開當前路徑下的名字為't.csv'的文件,如果不存在這個文件,則創建它,返回myFile文件對象。

csv.writer(myFile)返回writer對象myWriter。

writerow()方法是一行一行寫入,writerows方法是一次寫入多行。

注意:如果文件't.csv'事先存在,調用writer函數會先清空原文件中的文本,再執行writerow/writerows方法。

補充:除了writerow、writerows,writer對象還提供了其他一些方法:writeheader、dialect

  • register_dialect(name, [dialect, ]**fmtparams)

這個函數是用來自定義dialect的。

參數說明:

name,你所自定義的dialect的名字,比如默認的是'excel',你可以定義成'mydialect'

[dialect, ]**fmtparams,dialect格式參數,有delimiter(分隔符,默認的就是逗號)、quotechar、

quoting等等,可以參考Dialects and Formatting Parameters

    csv.register_dialect('mydialect',delimiter='|', quoting=csv.QUOTE_ALL) 

上面一行程序自定義了一個命名為mydialect的dialect,參數只設置了delimiter和quoting這兩個,其他的仍然采用

默認值,其中以'|'為分隔符。接下來我們就可以像使用'excel'一樣來使用'mydialect'了。我們來看看效果:

?

在我test.csv中存儲如下數據:

以'mydialect'風格打印:

    with open('test.csv','rb') as myFile: lines=csv.reader(myFile,'mydialect') print lines.line_num for line in lines: print line 

輸出:

?

['1,2', '3'] ['4,5', '6']

?

?

可以看到,現在是以'|'為分隔符,1和2合成了一個字符串(因為1和2之間的分隔符是逗號,而mydialect風格的分隔

符是'|'),3單獨一個字符串。

對于writer()函數,同樣可以傳入mydialect作為參數,這里不贅述。

  • unregister_dialect(name)

這個函數用于注銷自定義的dialect

?

此外,csv模塊還提供get_dialect(name)、list_dialects()、field_size_limit([new_limit])等函數,這些都比較

簡單,可以自己試試。比如list_dialects()函數會列出當前csv模塊里所有的dialect:

    print csv.list_dialects()  

輸出:

?

['excel-tab', 'excel', 'mydialect']

?

?

'mydialect'是自定義的,'excel-tab', 'excel'都是自帶的dialect,其中'excel-tab'跟'excel'差不多,

只不過以tab為分隔符。

?

csv模塊還定義了

一些類:DictReader、DictWriter、Dialect等,DictReader和DictWriter類似于reader和writer。

一些常量:QUOTE_ALL、QUOTE_MINIMAL、.QUOTE_NONNUMERIC等,這些常量可以作為Dialects and Formatting Parameters的值。

?

csv文件格式是一種通用的電子表格和數據庫導入導出格式。最近我調用RPC處理服務器數據時,經常需要將數據做個存檔便使用了這一方便的格式。

?

?

Python csv模塊封裝了常用的功能,使用的簡單例子如下:

?

復制代碼
# 讀取csv文件
import csv
with open('some.csv', 'rb') as f: # 采用b的方式處理可以省去很多問題 reader = csv.reader(f) for row in reader: # do something with row, such as row[0],row[1] import csv with open('some.csv', 'wb') as f: # 采用b的方式處理可以省去很多問題 writer = csv.writer(f) writer.writerows(someiterable)
復制代碼

?

?

默認的情況下, 讀和寫使用逗號做分隔符(delimiter),用雙引號作為引用符(quotechar),當遇到特殊情況是,可以根據需要手動指定字符, 例如:

?

import csv
with open('passwd', 'rb') as f: reader = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE) for row in reader: print row

?

?

上述示例指定冒號作為分隔符,并且指定quote方式為不引用。這意味著讀的時候都認為內容是不被默認引用符(")包圍的。quoting的可選項為: QUOTE_ALL, QUOTE_MINIMAL, QUOTE_NONNUMERIC, QUOTE_NONE.

?

有點需要注意的是,當用writer寫數據時, None 會被寫成空字符串,浮點類型會被調用 repr() 方法轉化成字符串。所以非字符串類型的數據會被 str() 成字符串存儲。所以當涉及到unicode字符串時,可以自己手動編碼后存儲或者使用csv提供的 UnicodeWriter, 具體可參見這里。

?

字典方式地讀寫

?

csv還提供了一種類似于字典方式的讀寫,方式如下:

?

格式如下:

?

class csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)class csv.DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)

?

?

其中fieldnames指定字典的key值,如果reader里沒有指定那么默認第一行的元素,在writer里一定要指定這個。

?

使用示例

?

復制代碼
# 讀
>>> import csv
>>> with open('names.csv') as csvfile: ... reader = csv.DictReader(csvfile) ... for row in reader: ... print(row['first_name'], row['last_name']) ... Baked Beans Lovely Spam Wonderful Spam #import csv with open('names.csv', 'w') 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模塊還涉及了其它的概念,比如 Dialects, 還提供了供錯誤處理的 exception csv.Error 等,因為實際使用較少及就不累贅在此。更多參考官方文檔。

?

cr : http://www.cnblogs.com/sjfgod/p/7623395.html

posted on 2017-10-26 16:25?會飛的蝌蚪 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/hfdkd/p/7737483.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390996.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390996.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390996.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java里面遍歷list的方式

問題:Java里面遍歷list的方式 對于Java語言有點陌生,我嘗試熟悉遍歷list(或者其他集合)的所有方法(或者是其他正確的語法)和它們每一個方法的優缺點 給定 List的list對象,我知道有下列方法去循…

python 重啟內核_Python從零開始的內核回歸

python 重啟內核Every beginner in Machine Learning starts by studying what regression means and how the linear regression algorithm works. In fact, the ease of understanding, explainability and the vast effective real-world use cases of linear regression is…

bzoj千題計劃282:bzoj4517: [Sdoi2016]排列計數

http://www.lydsy.com/JudgeOnline/problem.php?id4517 組合數錯排公式 #include<cstdio> #include<iostream>using namespace std;#define N 1000001const int mod1e97;long long fac[N],inv[N],f[N];void read(int &x) {x0; char cgetchar();while(!isdigit…

chrome啟用flash_如何在Google Chrome中啟用Adobe Flash Player

chrome啟用flashRemember Adobe Flash player? Its that nifty software that lets websites embed videos and web games. Whole websites can even be powered by Flash.還記得Adobe Flash Player嗎&#xff1f; 正是這些漂亮的軟件使網站可以嵌入視頻和網絡游戲。 整個網站…

怎么樣把Java的字符串轉化為字節數組?

問題&#xff1a;怎么樣把Java的字符串轉化為字節數組 有沒有任何方法把Java的字符串轉化為字節數組 我嘗試這樣: System.out.println(response.split("\r\n\r\n")[1]); System.out.println("******"); System.out.println(response.split("\r\n\r\…

Forward團隊-爬蟲豆瓣top250項目-模塊開發過程

項目托管平臺地址:https://github.com/xyhcq/top250 開發模塊功能: 寫入文件功能 開發時間:3小時 實現將爬取到的信息寫入到文件中的功能 實現過程&#xff1a; # 打開文件 fopen("top250.txt","w") 在別的隊員寫的代碼基礎上&#xff0c;加入功能代碼 de…

CSS3 outline-offset 屬性 項目中input會遇到

outline在一個聲明中設置所有的輪廓屬性。outline:顏色&#xff08;outline-line&#xff09;樣式&#xff08;outline-style&#xff09;寬度&#xff08;outline-width&#xff09; outline-offset 屬性對輪廓進行偏移&#xff0c;并在邊框邊緣進行繪制。 輪廓在兩方面與邊框…

回歸分析中自變量共線性_具有大特征空間的回歸分析中的變量選擇

回歸分析中自變量共線性介紹 (Introduction) Performing multiple regression analysis from a large set of independent variables can be a challenging task. Identifying the best subset of regressors for a model involves optimizing against things like bias, multi…

winform窗體模板_如何驗證角模板驅動的窗體

winform窗體模板介紹 (Introduction) In this article, we will learn about validations in Angular template-driven forms. We will create a simple user registration form and implement some inbuilt validations on it. Along with the inbuilt validations, we will a…

【loj6191】「美團 CodeM 復賽」配對游戲 概率期望dp

題目描述 n次向一個棧中加入0或1中隨機1個&#xff0c;如果一次加入0時棧頂元素為1&#xff0c;則將這兩個元素彈棧。問最終棧中元素個數的期望是多少。 輸入 一行一個正整數 n 。 輸出 一行一個實數&#xff0c;表示期望剩下的人數&#xff0c;四舍五入保留三位小數。 樣例輸入…

查找滿足斷言的第一個元素

問題&#xff1a;查找滿足斷言的第一個元素 我剛剛開始使用Java 8的lambdas&#xff0c;我嘗試去實現一些我在函數式語言里面經常用的 例如&#xff0c;大部分的函數式語言里有一些查找函數&#xff0c;針對序列或者list進行操作&#xff0c;返回使得斷言為真的第一個元素。我…

Lock和synchronized的選擇

學習資源:http://www.cnblogs.com/dolphin0520/p/3923167.html 一.java.util.concurrent.locks包下常用的類 1.Lock public interface Lock { void lock();//用來獲取鎖。如果鎖已被其他線程獲取&#xff0c;則進行等待。void lockInterruptibly() throws InterruptedException…

python 面試問題_值得閱讀的30個Python面試問題

python 面試問題Interview questions are quite tricky to predict. In most cases, even peoples with great programming ability fail to answer some simple questions. Solving the problem with your code is not enough. Often, the interviewer will expect you to hav…

spring boot中 使用http請求

因為項目需求&#xff0c;需要兩個系統之間進行通信&#xff0c;經過一番調研&#xff0c;決定使用http請求。服務端沒有什么好說的&#xff0c;本來就是使用web 頁面進行訪問的&#xff0c;所以spring boot啟動后&#xff0c;controller層的接口就自動暴露出來了&#xff0c;客…

arduino joy_如何用Joy開發Kubernetes應用

arduino joyLet’s face it: Developing distributed applications is painful.讓我們面對現實&#xff1a;開發分布式應用程序很痛苦。 Microservice architectures might be great for decoupling and scalability but they are intimidatingly complex when it comes to de…

怎么樣得到平臺相關的換行符?

問題&#xff1a;怎么樣得到平臺相關的換行符&#xff1f; Java里面怎么樣得到平臺相關的換行符。我不可能到處都用"\n" 回答一 In addition to the line.separator property, if you are using java 1.5 or later and the String.format (or other formatting me…

scrapy常用工具備忘

scrapy常用的命令分為全局和項目兩種命令&#xff0c;全局命令就是不需要依靠scrapy項目&#xff0c;可以在全局環境下運行&#xff0c;而項目命令需要在scrapy項目里才能運行。一、全局命令##使用scrapy -h可以看到常用的全局命令 [rootaliyun ~]# scrapy -h Scrapy 1.5.0 - n…

機器學習模型 非線性模型_機器學習:通過預測菲亞特500的價格來觀察線性模型的工作原理...

機器學習模型 非線性模型Introduction介紹 In this article, I’d like to speak about linear models by introducing you to a real project that I made. The project that you can find in my Github consists of predicting the prices of fiat 500.在本文中&#xff0c;…

NOIP賽前模擬20171027總結

題目&#xff1a; 1.壽司 給定一個環形的RB串要求經過兩兩互換后RB分別形成兩段連續區域,求最少操作次數(算法時間O(n)) 2.金字塔 給定一個金字塔的側面圖有n層已知每一層的寬度高度均為1要求在圖中取出恰好K個互不相交的矩形&#xff08;邊緣可以重疊&#xff09;,求最多可以取…

虛幻引擎 js開發游戲_通過編碼3游戲學習虛幻引擎4-5小時免費游戲開發視頻課程

虛幻引擎 js開發游戲One of the most widely used game engines is Unreal Engine by Epic Games. On the freeCodeCamp.org YouTube channel, weve published a comprehensive course on how to use Unreal Engine with C to develop games.Epic Games的虛幻引擎是使用最廣泛的…