摘要:一概述逗號分隔符文件是表格與數(shù)據(jù)庫操作之中最常用的輸入輸出格式。但是盡管不同規(guī)范的之中,分隔符和引用符千差萬別,他們的格式還是大體相似的,因此制作一個可以高效處理文件中的數(shù)據(jù)同時還能將讀寫的細(xì)節(jié)隱去的模塊并不是什么難事兒。
一、概述
CSV(逗號分隔符)文件是表格與數(shù)據(jù)庫操作之中最常用的輸入輸出格式。在RFC4180中的文件描述標(biāo)準(zhǔn)對CSV格式進(jìn)行規(guī)范之前,CSV格式文件就已經(jīng)被應(yīng)用了很多年了。而缺乏合適的格式描述規(guī)范意味著不同應(yīng)用的輸入輸出格式會有著細(xì)微的差別。因此在從不同源生成這些文件的時候,這些差別相當(dāng)惱人。但是盡管不同規(guī)范的CSV之中,分隔符和引用符千差萬別,他們的格式還是大體相似的,因此制作一個可以高效處理(manipulate)csv文件中的數(shù)據(jù)同時還能將讀寫的細(xì)節(jié)隱去的模塊并不是什么難事兒。
Python中的CSV模塊之中實(shí)現(xiàn)了讀寫CSV格式文件的一些類,他可以讓你的程序以一種更容易被Excel處理的格式來輸出或者讀入數(shù)據(jù),而不必糾結(jié)于CSV文件的一些麻煩的小細(xì)節(jié)。而且CSV模塊可以讓你更自由的定制你想要的CSV格式文件。
csv.reader(csvfile, dialect="excel", **fmtparams)
他是讀取CSV文件時最常用的方法
他的csvfile參數(shù)需要一個文件類型的對象,比如:
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.
其實(shí)這個看你想以什么規(guī)范操作csv文件,可選的參數(shù)有三個,分別是excel,excel-tab和unix,基本用不著該這個參數(shù)。
而至于fmtparams包含的可選參數(shù)就得好好說道說道了。
delimiter
這個參數(shù)是用來指明分割符的,多數(shù)csv文件的分隔符是英文逗號,但是萬一有文件整點(diǎn)幺蛾子咋整,比如把英文冒號當(dāng)分割符,那就要把這個參數(shù)指明為:delimiter=":"
quotechar
這個參數(shù)指明了引用符是啥,什么是引用符呢,舉個例子,正常情況下,我們的csv之中的一行可能是這個樣子的:abc,bcd,cde。就像這樣
這沒啥問題
但是萬一你的csv文件的每有一個表格里記錄的是:ab,c,就像這樣
這就出事兒了,因?yàn)閏sv當(dāng)你的一個表格內(nèi)出現(xiàn)了一個英文逗號,而此時你的分隔符也恰好是英文逗號,那把這玩意關(guān)了在打開,那最后豈不是會變成了
這樣,為了防止這種情況發(fā)生,就需要用引用符了,我們把a(bǔ)b,c用雙引號括起來,告訴程序,這個“ab,c”是一個東西,不許拆分,就可以了。而因此,你可以傳入quotechar="xxx"來定義你自己的引用符。
quoting
他的功能是指明了引用的模式,首先說,他可以接受幾種參數(shù),長得像csv.QUOTE_的參數(shù)都可以傳進(jìn)去,比如說csv.QUOTE_NONE,就是告訴程序,我的csv文件里不存在引用符,也就是說,所有的逗號都當(dāng)做分隔符,不管他在不在引用符里面。
doublequote
那么萬一我們的一個表格里本身就即包括一個英文逗號又包括一個雙引號,而恰好你的分隔符是英文都好,而引用符也是英文雙引號,這不又出事兒了么,就好比,假如你的一個行長這樣,
由于第二列里有一個逗號,那就要用引用符把這個東西包起來,而里面又有一個雙引號,那這時候匹配雙引號的時候就會出錯了,而為了防止這種問題的產(chǎn)生,我們在文件編輯的時候,可以把引用符之中的雙引號重復(fù)一次,用來代表:這個表格里出現(xiàn)了一次雙引號,比如用記事本打開的時候,像這樣
這樣在csvReader讀取文件的時候,他如果碰到了在引用符之中的引用符,會吧連續(xù)的兩個引用符看做一個雙引用符。也就是說用csvReader讀取的時候,讀取的結(jié)果就是會就是
看吧,沒錯了吧
escapechar
doublequote提供了一種,解決如果引用符里出現(xiàn)引用符問題的文件規(guī)范,而你也可以自己搞一套解決方案,誰說必須要重復(fù)一次啊,煩不煩啊,我就不想敲兩次,于是我把doublequote這個參數(shù)指定為False,但是還是要必須指定點(diǎn)啥玩意來完成這個功能的。這就是這個參數(shù)的功能。比如說當(dāng)我們吧這個參數(shù)指定為escapechar=":",而當(dāng)我們的輸入文件為
那么在用csvReader讀取的時候,由于第二個引號有一個冒號前綴,那么讀取的時候就會認(rèn)為,第二個冒號是這個表格內(nèi)就存在的冒號,不是作為分割符存在的。讀取結(jié)果與上一個結(jié)果一樣的。
在使用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.數(shù)據(jù)寫入
csv.writer(csvfile, dialect="excel", **fmtparams)
關(guān)鍵參數(shù)與之前一樣,反過來理解就好了
寫入示例代碼如下
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"])
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://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...
摘要:簡介讀取數(shù)據(jù)共有三種方法當(dāng)運(yùn)行每步計算的時候,從獲取數(shù)據(jù)。數(shù)據(jù)直接預(yù)加載到的中,再把傳入運(yùn)行。在中定義好文件讀取的運(yùn)算節(jié)點(diǎn),把傳入運(yùn)行時,執(zhí)行讀取文件的運(yùn)算,這樣可以避免在和執(zhí)行環(huán)境之間反復(fù)傳遞數(shù)據(jù)。本文講解的代碼。 簡介 TensorFlow讀取數(shù)據(jù)共有三種方法: Feeding:當(dāng)TensorFlow運(yùn)行每步計算的時候,從Python獲取數(shù)據(jù)。在Graph的設(shè)計階段,用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...
摘要:啟動允許后臺運(yùn)行,但是必須指定日志記錄文件路徑指定日志記錄文件路徑導(dǎo)出指定數(shù)據(jù)庫指定指定輸出文件名稱導(dǎo)出為格式指明需要導(dǎo)出哪些列指明導(dǎo)出格式為導(dǎo)入導(dǎo)入文件指明要導(dǎo)入的文件格式 啟動MongoDB $mongod --fork --logpath=/data/log/r3.log--fork 允許mongod后臺運(yùn)行,但是必須指定日志記錄文件路徑(Enables a daemon mod...
摘要:在這個教程中,我們將利用的和包來進(jìn)行數(shù)據(jù)清洗。在很多情況下,使用唯一的值作為索引值識別數(shù)據(jù)字段是非常有幫助的。清洗數(shù)據(jù)字段到現(xiàn)在為止,我們移除了不必要的列并改變了我們的索引變得更有意義。 作者:xiaoyu微信公眾號:Python數(shù)據(jù)科學(xué)知乎:Python數(shù)據(jù)分析師 數(shù)據(jù)科學(xué)家花了大量的時間清洗數(shù)據(jù)集,并將這些數(shù)據(jù)轉(zhuǎn)換為他們可以處理的格式。事實(shí)上,很多數(shù)據(jù)科學(xué)家聲稱開始獲取和清洗數(shù)據(jù)...
閱讀 1093·2021-10-12 10:11
閱讀 876·2019-08-30 15:53
閱讀 2286·2019-08-30 14:15
閱讀 2960·2019-08-30 14:09
閱讀 1196·2019-08-29 17:24
閱讀 971·2019-08-26 18:27
閱讀 1282·2019-08-26 11:57
閱讀 2145·2019-08-23 18:23