电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python如何讀取、寫入CSV數據

瀏覽:42日期:2022-07-16 10:52:22

問題

你想讀寫一個CSV格式的文件。

解決方案

對于大多數的CSV格式的數據讀寫問題,都可以使用 csv 庫。、例如,假設你在一個名叫stocks.csv文件中有一些股票市場數據,就像這樣:

下面向你展示如何將這些數據讀取為一個元組的序列:

import csvwith open(’stocks.csv’) as f: f_csv = csv.reader(f) headers = next(f_csv) for row in f_csv: # Process row ...

在上面的代碼中,row 會是一個元組。因此,為了訪問某個字段,你需要使用下標,如row[0]訪問Symbol,row[4]訪問Change。

由于這種下標訪問通常會引起混淆,你可以考慮使用命名元組。例如:

from collections import namedtuplewith open(’stock.csv’) as f: f_csv = csv.reader(f) headings = next(f_csv) Row = namedtuple(’Row’, headings) for r in f_csv: row = Row(*r) # Process row ...

它允許你使用列名如 row.Symbol 和 row.Change 代替下標訪問。需要注意的是這個只有在列名是合法的Python標識符的時候才生效。如果不是的話,你可能需要修改下原始的列名(如將非標識符字符替換成下劃線之類的)。

另外一個選擇就是將數據讀取到一個字典序列中去。可以這樣做:

import csvwith open(’stocks.csv’) as f: f_csv = csv.DictReader(f) for row in f_csv: # process row ...

在這個版本中,你可以使用列名去訪問每一行的數據了。比如,row[’Symbol’] 或者 row[’Change’] 。

為了寫入CSV數據,你仍然可以使用csv模塊,不過這時候先創建一個 writer 對象。例如;

headers = [’Symbol’,’Price’,’Date’,’Time’,’Change’,’Volume’]rows = [(’AA’, 39.48, ’6/11/2007’, ’9:36am’, -0.18, 181800), (’AIG’, 71.38, ’6/11/2007’, ’9:36am’, -0.15, 195500), (’AXP’, 62.58, ’6/11/2007’, ’9:36am’, -0.46, 935000), ]with open(’stocks.csv’,’w’) as f: f_csv = csv.writer(f) f_csv.writerow(headers) f_csv.writerows(rows)

如果你有一個字典序列的數據,可以像這樣做:

headers = [’Symbol’, ’Price’, ’Date’, ’Time’, ’Change’, ’Volume’]rows = [{’Symbol’:’AA’, ’Price’:39.48, ’Date’:’6/11/2007’, ’Time’:’9:36am’, ’Change’:-0.18, ’Volume’:181800}, {’Symbol’:’AIG’, ’Price’: 71.38, ’Date’:’6/11/2007’, ’Time’:’9:36am’, ’Change’:-0.15, ’Volume’: 195500}, {’Symbol’:’AXP’, ’Price’: 62.58, ’Date’:’6/11/2007’, ’Time’:’9:36am’, ’Change’:-0.46, ’Volume’: 935000}, ]with open(’stocks.csv’,’w’) as f: f_csv = csv.DictWriter(f, headers) f_csv.writeheader() f_csv.writerows(rows)

討論

你應該總是優先選擇csv模塊分割或解析CSV數據。例如,你可能會像編寫類似下面這樣的代碼:

with open(’stocks.csv’) as f:for line in f: row = line.split(’,’) # process row ...

使用這種方式的一個缺點就是你仍然需要去處理一些棘手的細節問題。比如,如果某些字段值被引號包圍,你不得不去除這些引號。另外,如果一個被引號包圍的字段碰巧含有一個逗號,那么程序就會因為產生一個錯誤大小的行而出錯。

默認情況下,csv 庫可識別Microsoft Excel所使用的CSV編碼規則。這或許也是最常見的形式,并且也會給你帶來最好的兼容性。然而,如果你查看csv的文檔,就會發現有很多種方法將它應用到其他編碼格式上(如修改分割字符等)。例如,如果你想讀取以tab分割的數據,可以這樣做:

# Example of reading tab-separated valueswith open(’stock.tsv’) as f: f_tsv = csv.reader(f, delimiter=’t’) for row in f_tsv: # Process row ...

如果你正在讀取CSV數據并將它們轉換為命名元組,需要注意對列名進行合法性認證。例如,一個CSV格式文件有一個包含非法標識符的列頭行,類似下面這樣:

這樣最終會導致在創建一個命名元組時產生一個 ValueError 異常而失敗。為了解決這問題,你可能不得不先去修正列標題。例如,可以像下面這樣在非法標識符上使用一個正則表達式替換:

import rewith open(’stock.csv’) as f: f_csv = csv.reader(f) headers = [ re.sub(’[^a-zA-Z_]’, ’_’, h) for h in next(f_csv) ] Row = namedtuple(’Row’, headers) for r in f_csv: row = Row(*r) # Process row ...

還有重要的一點需要強調的是,csv產生的數據都是字符串類型的,它不會做任何其他類型的轉換。如果你需要做這樣的類型轉換,你必須自己手動去實現。下面是一個在CSV數據上執行其他類型轉換的例子:

col_types = [str, float, str, str, float, int]with open(’stocks.csv’) as f: f_csv = csv.reader(f) headers = next(f_csv) for row in f_csv: # Apply conversions to the row items row = tuple(convert(value) for convert, value in zip(col_types, row)) ...

另外,下面是一個轉換字典中特定字段的例子:

print(’Reading as dicts with type conversion’)field_types = [ (’Price’, float), (’Change’, float), (’Volume’, int) ]with open(’stocks.csv’) as f: for row in csv.DictReader(f): row.update((key, conversion(row[key])) for key, conversion in field_types) print(row)

通常來講,你可能并不想過多去考慮這些轉換問題。在實際情況中,CSV文件都或多或少有些缺失的數據,被破壞的數據以及其它一些讓轉換失敗的問題。因此,除非你的數據確實有保障是準確無誤的,否則你必須考慮這些問題(你可能需要增加合適的錯誤處理機制)。

最后,如果你讀取CSV數據的目的是做數據分析和統計的話,你可能需要看一看 Pandas 包。Pandas 包含了一個非常方便的函數叫 pandas.read_csv() ,它可以加載CSV數據到一個 DataFrame 對象中去。然后利用這個對象你就可以生成各種形式的統計、過濾數據以及執行其他高級操作了。

以上就是Python如何讀寫CSV數據的詳細內容,更多關于Python讀寫CSV數據的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 骨密度检测仪_骨密度分析仪_骨密度仪_动脉硬化检测仪专业生产厂家【品源医疗】 | 下水道疏通_管道疏通_马桶疏通_附近疏通电话- 立刻通 | 石家庄救护车出租_重症转院_跨省跨境医疗转送_活动赛事医疗保障_康复出院_放弃治疗_腾康26年医疗护送转诊团队 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 转向助力泵/水泵/发电机皮带轮生产厂家-锦州华一精工有限公司 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | ge超声波测厚仪-电动涂膜机-电动划格仪-上海洪富 | 迪威娱乐|迪威娱乐客服|18183620002| 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 直读光谱仪,光谱分析仪,手持式光谱仪,碳硫分析仪,创想仪器官网 | 沥青车辙成型机-车托式混凝土取芯机-混凝土塑料试模|鑫高仪器 | 网架支座@球铰支座@钢结构支座@成品支座厂家@万向滑动支座_桥兴工程橡胶有限公司 | 上海深蓝_缠绕机_缠膜机-上海深蓝机械装备有限公司 | 黑龙江京科脑康医院-哈尔滨精神病医院哪家好_哈尔滨精神科医院排名_黑龙江精神心理病专科医院 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | 盐水蒸发器,水洗盐设备,冷凝结晶切片机,转鼓切片机,絮凝剂加药系统-无锡瑞司恩机械有限公司 | 全自动烧卖机厂家_饺子机_烧麦机价格_小笼汤包机_宁波江北阜欣食品机械有限公司 | 灌木树苗-绿化苗木-常绿乔木-价格/批发/基地 - 四川成都途美园林 | 精益专家 - 设备管理软件|HSE管理系统|设备管理系统|EHS安全管理系统 | 医养体检包_公卫随访箱_慢病随访包_家签随访包_随访一体机-济南易享医疗科技有限公司 | 安徽净化工程设计_无尘净化车间工程_合肥净化实验室_安徽创世环境科技有限公司 | 解放卡车|出口|济南重汽|报价大全|山东三维商贸有限公司 | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 | 二手注塑机回收_旧注塑机回收_二手注塑机买卖 - 大鑫二手注塑机 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 台式低速离心机-脱泡离心机-菌种摇床-常州市万丰仪器制造有限公司 | 氟氨基酮、氯硝柳胺、2-氟苯甲酸、异香兰素-新晨化工 | ET3000双钳形接地电阻测试仪_ZSR10A直流_SXJS-IV智能_SX-9000全自动油介质损耗测试仪-上海康登 | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | 美的商用净水器_美的直饮机_一级代理经销商_Midea租赁价格-厂家反渗透滤芯-直饮水批发品牌售后 | 带式压滤机_污泥压滤机_污泥脱水机_带式过滤机_带式压滤机厂家-河南恒磊环保设备有限公司 | 企业VI设计_LOGO设计公司_品牌商标设计_【北京美研】 | 雷蒙磨,雷蒙磨粉机,雷蒙磨机 - 巩义市大峪沟高峰机械厂 | 船老大板材_浙江船老大全屋定制_船老大官网 | 今日热点_实时热点_奇闻异事_趣闻趣事_灵异事件 - 奇闻事件 | 聚丙烯酰胺_厂家_价格-河南唐达净水材料有限公司 | 神超官网_焊接圆锯片_高速钢锯片_硬质合金锯片_浙江神超锯业制造有限公司 | 带式过滤机厂家_价格_型号规格参数-江西核威环保科技有限公司 | 膏剂灌装旋盖机-眼药水灌装生产线-西林瓶粉剂分装机-南通博琅机械科技 | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 |