Python处理csv文件
?https://www.cnblogs.com/yanglang/p/7126660.html
Python處理csv文件
CSV(Comma-Separated Values)即逗號(hào)分隔值,可以用Excel打開(kāi)查看。由于是純文本,任何編輯器也都可打開(kāi)。與Excel文件不同,CSV文件中:
- 值沒(méi)有類型,所有值都是字符串
- 不能指定字體顏色等樣式
- 不能指定單元格的寬高,不能合并單元格
- 沒(méi)有多個(gè)工作表
- 不能嵌入圖像圖表
在CSV文件中,以,作為分隔符,分隔兩個(gè)單元格。像這樣a,,c表示單元格a和單元格c之間有個(gè)空白的單元格。依此類推。
不是每個(gè)逗號(hào)都表示單元格之間的分界。所以即使CSV是純文本文件,也堅(jiān)持使用專門的模塊進(jìn)行處理。Python內(nèi)置了csv模塊。先看看一個(gè)簡(jiǎn)單的例子。
從CSV文件中讀取數(shù)據(jù)
import csvfilename = 'F:/Jupyter Notebook/matplotlib_pygal_csv_json/sitka_weather_2014.csv' with open(filename) as f:reader = csv.reader(f)print(list(reader))data不能直接打印,list(data)最外層是list,里層的每一行數(shù)據(jù)都在一個(gè)list中,有點(diǎn)像這樣
[['name', 'age'], ['Bob', '14'], ['Tom', '23'], ...]于是我們可以這樣訪問(wèn)到Bob的年齡reader[1][1], 在for循環(huán)中遍歷如下
import csvfilename = 'F:/Jupyter Notebook/matplotlib_pygal_csv_json/sitka_weather_2014.csv' with open(filename) as f:reader = csv.reader(f)for row in reader:# 行號(hào)從1開(kāi)始print(reader.line_num, row)截取一部分輸出
1 ['AKST', 'Max TemperatureF', 'Mean TemperatureF', 'Min TemperatureF', 'Max Dew PointF', 'MeanDew PointF', 'Min DewpointF', 'Max Humidity', ' Mean Humidity', ' Min Humidity', ' Max Sea Level PressureIn', ' Mean Sea Level PressureIn', ' Min Sea Level PressureIn', ' Max VisibilityMiles', ' Mean VisibilityMiles', ' Min VisibilityMiles', ' Max Wind SpeedMPH', ' Mean Wind SpeedMPH', ' Max Gust SpeedMPH', 'PrecipitationIn', ' CloudCover', ' Events', ' WindDirDegrees'] 2 ['2014-1-1', '46', '42', '37', '40', '38', '36', '97', '86', '76', '29.95', '29.77', '29.57', '10', '8', '2', '25', '14', '36', '0.69', '8', 'Rain', '138'] ...前面的數(shù)字是行號(hào),從1開(kāi)始,可以用reader.line_num獲取。
要注意的是,reader只能被遍歷一次。由于reader是可迭代對(duì)象,可以使用next方法一次獲取一行。
import csvfilename = 'F:/Jupyter Notebook/matplotlib_pygal_csv_json/sitka_weather_2014.csv' with open(filename) as f:reader = csv.reader(f)# 讀取一行,下面的reader中已經(jīng)沒(méi)有該行了head_row = next(reader)for row in reader:# 行號(hào)從2開(kāi)始print(reader.line_num, row)寫(xiě)數(shù)據(jù)到csv文件中
有reader可以讀取,當(dāng)然也有writer可以寫(xiě)入。一次寫(xiě)入一行,一次寫(xiě)入多行都可以。
import csv# 使用數(shù)字和字符串的數(shù)字都可以 datas = [['name', 'age'],['Bob', 14],['Tom', 23],['Jerry', '18']]with open('example.csv', 'w', newline='') as f:writer = csv.writer(f)for row in datas:writer.writerow(row)# 還可以寫(xiě)入多行writer.writerows(datas)如果不指定newline='',則每寫(xiě)入一行將有一空行被寫(xiě)入。上面的代碼生成如下內(nèi)容。
name,age Bob,14 Tom,23 Jerry,18 name,age Bob,14 Tom,23 Jerry,18DictReader和DictWriter對(duì)象
使用DictReader可以像操作字典那樣獲取數(shù)據(jù),把表的第一行(一般是標(biāo)頭)作為key。可訪問(wèn)每一行中那個(gè)某個(gè)key對(duì)應(yīng)的數(shù)據(jù)。
import csvfilename = 'F:/Jupyter Notebook/matplotlib_pygal_csv_json/sitka_weather_2014.csv' with open(filename) as f:reader = csv.DictReader(f)for row in reader:# Max TemperatureF是表第一行的某個(gè)數(shù)據(jù),作為keymax_temp = row['Max TemperatureF']print(max_temp)使用DictWriter類,可以寫(xiě)入字典形式的數(shù)據(jù),同樣鍵也是標(biāo)頭(表格第一行)。
import csvheaders = ['name', 'age']datas = [{'name':'Bob', 'age':23},{'name':'Jerry', 'age':44},{'name':'Tom', 'age':15}]with open('example.csv', 'w', newline='') as f:# 標(biāo)頭在這里傳入,作為第一行數(shù)據(jù)writer = csv.DictWriter(f, headers)writer.writeheader()for row in datas:writer.writerow(row)# 還可以寫(xiě)入多行writer.writerows(datas)就先了解到這兒。
總結(jié)
以上是生活随笔為你收集整理的Python处理csv文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: The 'Microsoft.Jet.O
- 下一篇: 语音信号预处理4——绘制接滤波后chir
