CSV文件读取和处理
CSV的特點
- 每行文本都呈現為行,字段被分隔符分隔開。這個分隔符通常是逗號,有時也是制表符。
- 不需要使用專門的CSV軟件來導入CSV文件。使用最簡單的文本編輯器就可以打開CSV文件。
- 對于大多數編程語言而言,讀取編寫CSV文件的程序會相對簡單。
- 任何電子表格應用都可以用來讀取CSV文件。
使用Python對CSV文件進行讀寫
with語句介紹
通常情況下使用python進行讀文件的語句是這樣的
f = open('/Users/michael/test.txt', 'r')如果文件打開成功,接下來,調用read()方法可以一次讀取文件的全部內容
f.read()由于文件讀寫時都有可能產生IOError,一旦出錯,后面的f.close()就不會調用。所以,為了保證無論是否出錯都能正確地關閉文件,我們可以使用try … finally來實現:
try:f = open('/path/to/file', 'r')print(f.read()) finally:if f:f.close()但是每次都這么寫實在太繁瑣,所以,Python引入了with語句來自動幫我們調用close()方法:
with open('/path/to/file', 'r') as f:print(f.read())這和前面的try …finally是一樣的,但是代碼更佳簡潔,并且不必調用f.close()方法。
將CSV語句轉換為列表的方法
方法一:
import unincodecsv enrollments=[] with open('enrollments.csv','rb') as f:reader=unicodecsv.DictReader(f)for row in reader:enrollments.append(row) enrollments[0]我們讀文件時使用DictReader()方法而不用reader()方法的原因是DictReader()方法返回的是一個字典,而用reader()方法返回的是一個迭代對象。之后將reader中的內容按行讀取,放到enrollments中。
更簡潔的方法二:
import unincodecsv with open('enrollments.csv','rb') as f:reader=unicodecsv.DictReader(f)enrollmenst=list(reader) enrollments[0]這種方法的好處是可以省去for循環,將reader強制轉換為列表。
從CSV文件中讀取前十行并將其值存為字典
def parse_file(datafile):data=[]with open(datafile,"rb") as f:header=f.readline().splite(",")counter=0for line in f: #從新讀取十行if counter==10:breakfields=line.splite(",") #設立一個entry空字典,每次賦給data后都將這個字典清空entry={}for i,value in enumerate(fields):entry[header[i].strip()]=value.strip()data.append(entry)counter+=1return data這段代碼中首先使用with語句打開文件,接下來讀取文件第一行的內容并按照“,”進行分割。header中的內容將作為字典的關鍵字。header[i]為header中的對應項,用strip()方法處理之后就是關鍵字。value.strip()為值。
read()、readline()和readlines()方法
這三個方法都是讀文本中的字符串,下面簡單介紹一下用法
read()
read() 每次讀取整個文件,它通常用于將文件內容放到一個字符串變量中。
readline()和readlines()
readline() 和 readlines()之間的差異是后者一次讀取整個文件對象 。
readlines()一次讀取整個文件=。并且自動將文件內容分析成一個行的列表,該列表可以由 Python 的 for… in … 結構進行處理。另一方面,readline()每次只讀取一行,通常比 readlines()慢得多。僅當沒有足夠內存可以一次讀取整個文件時,才應該使用readline()。
enumerate()函數介紹
enumerate是枚舉的意思,在python中這個函數的作用是用于遍歷序列中的元素以及它們的下標??梢杂糜趧摻ㄗ值?#xff0c;將鍵和值對應歸類。如下代碼所示(當然并不是用下面的代碼就能創建字典,index通常是提供鍵位置的索引):
list1 = ["這", "是", "一個", "測試"] for index, item in enumerate(list1):print index, item >>> 0 這 1 是 2 一個 3 測試strip()方法介紹
strip()方法用于移除字符串頭尾指定的字符(默認為空格)。本程序中使用的strip()方法通常是用來清除文件這行的標題值或者單個值周圍無關的空白部分(空行)
更簡潔的方法
import csv def parse_csv(datafile):data=[]with open(datafile,"rb") as sd:r=csv.DictReader(sd)for line in r;data.append(line)return data這里引入csv模塊,使用DictReader方法,直接將數據讀取為字典。DictReader方法假設所讀取的文件的第一行為標題行,將其作為鍵。
CSV官方幫助文檔
最后附上我的優達學城優惠碼:C7B2877A
總結
以上是生活随笔為你收集整理的CSV文件读取和处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推论统计学基础一:Estimation
- 下一篇: 用XLRD批处理Excel