摘要:一概述逗號分隔符文件是表格與數據庫操作之中最常用的輸入輸出格式。但是盡管不同規范的之中,分隔符和引用符千差萬別,他們的格式還是大體相似的,因此制作一個可以高效處理文件中的數據同時還能將讀寫的細節隱去的模塊并不是什么難事兒。
一、概述
CSV(逗號分隔符)文件是表格與數據庫操作之中最常用的輸入輸出格式。在RFC4180中的文件描述標準對CSV格式進行規范之前,CSV格式文件就已經被應用了很多年了。而缺乏合適的格式描述規范意味著不同應用的輸入輸出格式會有著細微的差別。因此在從不同源生成這些文件的時候,這些差別相當惱人。但是盡管不同規范的CSV之中,分隔符和引用符千差萬別,他們的格式還是大體相似的,因此制作一個可以高效處理(manipulate)csv文件中的數據同時還能將讀寫的細節隱去的模塊并不是什么難事兒。
Python中的CSV模塊之中實現了讀寫CSV格式文件的一些類,他可以讓你的程序以一種更容易被Excel處理的格式來輸出或者讀入數據,而不必糾結于CSV文件的一些麻煩的小細節。而且CSV模塊可以讓你更自由的定制你想要的CSV格式文件。
csv.reader(csvfile, dialect="excel", **fmtparams)
他是讀取CSV文件時最常用的方法
他的csvfile參數需要一個文件類型的對象,比如:
fileObj = open("E:/inputFile.csv","r") csvReader = csv.reader(fileObj)
那么這個方法返回的csvReader就是一個可以按行讀取文件的對象。
An optional dialect parameter can be given which is used to define a set of parameters specific to a particular CSV dialect.
其實這個看你想以什么規范操作csv文件,可選的參數有三個,分別是excel,excel-tab和unix,基本用不著該這個參數。
而至于fmtparams包含的可選參數就得好好說道說道了。
delimiter
這個參數是用來指明分割符的,多數csv文件的分隔符是英文逗號,但是萬一有文件整點幺蛾子咋整,比如把英文冒號當分割符,那就要把這個參數指明為:delimiter=":"
quotechar
這個參數指明了引用符是啥,什么是引用符呢,舉個例子,正常情況下,我們的csv之中的一行可能是這個樣子的:abc,bcd,cde。就像這樣
這沒啥問題
但是萬一你的csv文件的每有一個表格里記錄的是:ab,c,就像這樣
這就出事兒了,因為csv當你的一個表格內出現了一個英文逗號,而此時你的分隔符也恰好是英文逗號,那把這玩意關了在打開,那最后豈不是會變成了
這樣,為了防止這種情況發生,就需要用引用符了,我們把ab,c用雙引號括起來,告訴程序,這個“ab,c”是一個東西,不許拆分,就可以了。而因此,你可以傳入quotechar="xxx"來定義你自己的引用符。
quoting
他的功能是指明了引用的模式,首先說,他可以接受幾種參數,長得像csv.QUOTE_的參數都可以傳進去,比如說csv.QUOTE_NONE,就是告訴程序,我的csv文件里不存在引用符,也就是說,所有的逗號都當做分隔符,不管他在不在引用符里面。
doublequote
那么萬一我們的一個表格里本身就即包括一個英文逗號又包括一個雙引號,而恰好你的分隔符是英文都好,而引用符也是英文雙引號,這不又出事兒了么,就好比,假如你的一個行長這樣,
由于第二列里有一個逗號,那就要用引用符把這個東西包起來,而里面又有一個雙引號,那這時候匹配雙引號的時候就會出錯了,而為了防止這種問題的產生,我們在文件編輯的時候,可以把引用符之中的雙引號重復一次,用來代表:這個表格里出現了一次雙引號,比如用記事本打開的時候,像這樣
這樣在csvReader讀取文件的時候,他如果碰到了在引用符之中的引用符,會吧連續的兩個引用符看做一個雙引用符。也就是說用csvReader讀取的時候,讀取的結果就是會就是
看吧,沒錯了吧
escapechar
doublequote提供了一種,解決如果引用符里出現引用符問題的文件規范,而你也可以自己搞一套解決方案,誰說必須要重復一次啊,煩不煩啊,我就不想敲兩次,于是我把doublequote這個參數指定為False,但是還是要必須指定點啥玩意來完成這個功能的。這就是這個參數的功能。比如說當我們吧這個參數指定為escapechar=":",而當我們的輸入文件為
那么在用csvReader讀取的時候,由于第二個引號有一個冒號前綴,那么讀取的時候就會認為,第二個冒號是這個表格內就存在的冒號,不是作為分割符存在的。讀取結果與上一個結果一樣的。
在使用reader的時候后,示例代碼如下
>>> import csv >>> with open("eggs.csv", newline="") as csvfile: ... spamreader = csv.reader(csvfile, delimiter=" ", quotechar="|") ... for row in spamreader: ... print(", ".join(row)) Spam, Spam, Spam, Spam, Spam, Baked Beans Spam, Lovely Spam, Wonderful Spam2.數據寫入
csv.writer(csvfile, dialect="excel", **fmtparams)
關鍵參數與之前一樣,反過來理解就好了
寫入示例代碼如下
import csv with open("eggs.csv", "w", newline="") as csvfile: spamwriter = csv.writer(csvfile, delimiter=" ", quotechar="|", quoting=csv.QUOTE_MINIMAL) spamwriter.writerow(["Spam"] * 5 + ["Baked Beans"]) spamwriter.writerow(["Spam", "Lovely Spam", "Wonderful Spam"])
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41328.html
摘要:漢字拼音 Awesome Python A curated list of awesome Python frameworks, libraries and software. Inspired by awesome-php. Awesome Python Environment Management Package Management Package Repositorie...
摘要:簡介讀取數據共有三種方法當運行每步計算的時候,從獲取數據。數據直接預加載到的中,再把傳入運行。在中定義好文件讀取的運算節點,把傳入運行時,執行讀取文件的運算,這樣可以避免在和執行環境之間反復傳遞數據。本文講解的代碼。 簡介 TensorFlow讀取數據共有三種方法: Feeding:當TensorFlow運行每步計算的時候,從Python獲取數據。在Graph的設計階段,用place...
摘要: Awesome JavaScript A collection of awesome browser-side JavaScript libraries, resources and shiny things. Awesome JavaScript Package Managers Loaders Testing Frameworks QA Tools MVC Framew...
摘要:啟動允許后臺運行,但是必須指定日志記錄文件路徑指定日志記錄文件路徑導出指定數據庫指定指定輸出文件名稱導出為格式指明需要導出哪些列指明導出格式為導入導入文件指明要導入的文件格式 啟動MongoDB $mongod --fork --logpath=/data/log/r3.log--fork 允許mongod后臺運行,但是必須指定日志記錄文件路徑(Enables a daemon mod...
摘要:在這個教程中,我們將利用的和包來進行數據清洗。在很多情況下,使用唯一的值作為索引值識別數據字段是非常有幫助的。清洗數據字段到現在為止,我們移除了不必要的列并改變了我們的索引變得更有意義。 作者:xiaoyu微信公眾號:Python數據科學知乎:Python數據分析師 數據科學家花了大量的時間清洗數據集,并將這些數據轉換為他們可以處理的格式。事實上,很多數據科學家聲稱開始獲取和清洗數據...
閱讀 1099·2021-10-12 10:11
閱讀 883·2019-08-30 15:53
閱讀 2296·2019-08-30 14:15
閱讀 2970·2019-08-30 14:09
閱讀 1204·2019-08-29 17:24
閱讀 978·2019-08-26 18:27
閱讀 1287·2019-08-26 11:57
閱讀 2157·2019-08-23 18:23