成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【Python Library】csv — CSV File Reading and Writing

zhigoo / 1063人閱讀

摘要:一概述逗號(hào)分隔符文件是表格與數(shù)據(jù)庫(kù)操作之中最常用的輸入輸出格式。但是盡管不同規(guī)范的之中,分隔符和引用符千差萬(wàn)別,他們的格式還是大體相似的,因此制作一個(gè)可以高效處理文件中的數(shù)據(jù)同時(shí)還能將讀寫(xiě)的細(xì)節(jié)隱去的模塊并不是什么難事兒。

一、概述

CSV(逗號(hào)分隔符)文件是表格與數(shù)據(jù)庫(kù)操作之中最常用的輸入輸出格式。在RFC4180中的文件描述標(biāo)準(zhǔn)對(duì)CSV格式進(jìn)行規(guī)范之前,CSV格式文件就已經(jīng)被應(yīng)用了很多年了。而缺乏合適的格式描述規(guī)范意味著不同應(yīng)用的輸入輸出格式會(huì)有著細(xì)微的差別。因此在從不同源生成這些文件的時(shí)候,這些差別相當(dāng)惱人。但是盡管不同規(guī)范的CSV之中,分隔符和引用符千差萬(wàn)別,他們的格式還是大體相似的,因此制作一個(gè)可以高效處理(manipulate)csv文件中的數(shù)據(jù)同時(shí)還能將讀寫(xiě)的細(xì)節(jié)隱去的模塊并不是什么難事兒。
Python中的CSV模塊之中實(shí)現(xiàn)了讀寫(xiě)CSV格式文件的一些類,他可以讓你的程序以一種更容易被Excel處理的格式來(lái)輸出或者讀入數(shù)據(jù),而不必糾結(jié)于CSV文件的一些麻煩的小細(xì)節(jié)。而且CSV模塊可以讓你更自由的定制你想要的CSV格式文件。

二、類與方法簡(jiǎn)介 1.數(shù)據(jù)讀取

csv.reader(csvfile, dialect="excel", **fmtparams)
他是讀取CSV文件時(shí)最常用的方法
他的csvfile參數(shù)需要一個(gè)文件類型的對(duì)象,比如:

fileObj = open("E:/inputFile.csv","r")
csvReader = csv.reader(fileObj)

那么這個(gè)方法返回的csvReader就是一個(gè)可以按行讀取文件的對(duì)象。

An optional dialect parameter can be given which is used to define a set of parameters specific to a particular CSV dialect.

其實(shí)這個(gè)看你想以什么規(guī)范操作csv文件,可選的參數(shù)有三個(gè),分別是excel,excel-tab和unix,基本用不著該這個(gè)參數(shù)。
而至于fmtparams包含的可選參數(shù)就得好好說(shuō)道說(shuō)道了。

delimiter

這個(gè)參數(shù)是用來(lái)指明分割符的,多數(shù)csv文件的分隔符是英文逗號(hào),但是萬(wàn)一有文件整點(diǎn)幺蛾子咋整,比如把英文冒號(hào)當(dāng)分割符,那就要把這個(gè)參數(shù)指明為:delimiter=":"

quotechar

這個(gè)參數(shù)指明了引用符是啥,什么是引用符呢,舉個(gè)例子,正常情況下,我們的csv之中的一行可能是這個(gè)樣子的:abc,bcd,cde。就像這樣

這沒(méi)啥問(wèn)題
但是萬(wàn)一你的csv文件的每有一個(gè)表格里記錄的是:ab,c,就像這樣

這就出事兒了,因?yàn)閏sv當(dāng)你的一個(gè)表格內(nèi)出現(xiàn)了一個(gè)英文逗號(hào),而此時(shí)你的分隔符也恰好是英文逗號(hào),那把這玩意關(guān)了在打開(kāi),那最后豈不是會(huì)變成了

這樣,為了防止這種情況發(fā)生,就需要用引用符了,我們把a(bǔ)b,c用雙引號(hào)括起來(lái),告訴程序,這個(gè)“ab,c”是一個(gè)東西,不許拆分,就可以了。而因此,你可以傳入quotechar="xxx"來(lái)定義你自己的引用符。

quoting

他的功能是指明了引用的模式,首先說(shuō),他可以接受幾種參數(shù),長(zhǎng)得像csv.QUOTE_的參數(shù)都可以傳進(jìn)去,比如說(shuō)csv.QUOTE_NONE,就是告訴程序,我的csv文件里不存在引用符,也就是說(shuō),所有的逗號(hào)都當(dāng)做分隔符,不管他在不在引用符里面。

doublequote

那么萬(wàn)一我們的一個(gè)表格里本身就即包括一個(gè)英文逗號(hào)又包括一個(gè)雙引號(hào),而恰好你的分隔符是英文都好,而引用符也是英文雙引號(hào),這不又出事兒了么,就好比,假如你的一個(gè)行長(zhǎng)這樣,

由于第二列里有一個(gè)逗號(hào),那就要用引用符把這個(gè)東西包起來(lái),而里面又有一個(gè)雙引號(hào),那這時(shí)候匹配雙引號(hào)的時(shí)候就會(huì)出錯(cuò)了,而為了防止這種問(wèn)題的產(chǎn)生,我們?cè)谖募庉嫷臅r(shí)候,可以把引用符之中的雙引號(hào)重復(fù)一次,用來(lái)代表:這個(gè)表格里出現(xiàn)了一次雙引號(hào),比如用記事本打開(kāi)的時(shí)候,像這樣

這樣在csvReader讀取文件的時(shí)候,他如果碰到了在引用符之中的引用符,會(huì)吧連續(xù)的兩個(gè)引用符看做一個(gè)雙引用符。也就是說(shuō)用csvReader讀取的時(shí)候,讀取的結(jié)果就是會(huì)就是

看吧,沒(méi)錯(cuò)了吧

escapechar

doublequote提供了一種,解決如果引用符里出現(xiàn)引用符問(wèn)題的文件規(guī)范,而你也可以自己搞一套解決方案,誰(shuí)說(shuō)必須要重復(fù)一次啊,煩不煩啊,我就不想敲兩次,于是我把doublequote這個(gè)參數(shù)指定為False,但是還是要必須指定點(diǎn)啥玩意來(lái)完成這個(gè)功能的。這就是這個(gè)參數(shù)的功能。比如說(shuō)當(dāng)我們吧這個(gè)參數(shù)指定為escapechar=":",而當(dāng)我們的輸入文件為

那么在用csvReader讀取的時(shí)候,由于第二個(gè)引號(hào)有一個(gè)冒號(hào)前綴,那么讀取的時(shí)候就會(huì)認(rèn)為,第二個(gè)冒號(hào)是這個(gè)表格內(nèi)就存在的冒號(hào),不是作為分割符存在的。讀取結(jié)果與上一個(gè)結(jié)果一樣的。

在使用reader的時(shí)候后,示例代碼如下

>>> 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 Spam
2.數(shù)據(jù)寫(xiě)入

csv.writer(csvfile, dialect="excel", **fmtparams)
關(guān)鍵參數(shù)與之前一樣,反過(guò)來(lái)理解就好了
寫(xiě)入示例代碼如下

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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41328.html

相關(guān)文章

  • Awesome Python

    摘要:漢字拼音 Awesome Python A curated list of awesome Python frameworks, libraries and software. Inspired by awesome-php. Awesome Python Environment Management Package Management Package Repositorie...

    fizz 評(píng)論0 收藏0
  • TensorFlow學(xué)習(xí)筆記(10):讀取文件

    摘要:簡(jiǎn)介讀取數(shù)據(jù)共有三種方法當(dāng)運(yùn)行每步計(jì)算的時(shí)候,從獲取數(shù)據(jù)。數(shù)據(jù)直接預(yù)加載到的中,再把傳入運(yùn)行。在中定義好文件讀取的運(yùn)算節(jié)點(diǎn),把傳入運(yùn)行時(shí),執(zhí)行讀取文件的運(yùn)算,這樣可以避免在和執(zhí)行環(huán)境之間反復(fù)傳遞數(shù)據(jù)。本文講解的代碼。 簡(jiǎn)介 TensorFlow讀取數(shù)據(jù)共有三種方法: Feeding:當(dāng)TensorFlow運(yùn)行每步計(jì)算的時(shí)候,從Python獲取數(shù)據(jù)。在Graph的設(shè)計(jì)階段,用place...

    Neilyo 評(píng)論0 收藏0
  • Awesome JavaScript

    摘要: 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...

    endless_road 評(píng)論0 收藏0
  • MongoDB常用命令

    摘要:?jiǎn)?dòng)允許后臺(tái)運(yùn)行,但是必須指定日志記錄文件路徑指定日志記錄文件路徑導(dǎo)出指定數(shù)據(jù)庫(kù)指定指定輸出文件名稱導(dǎo)出為格式指明需要導(dǎo)出哪些列指明導(dǎo)出格式為導(dǎo)入導(dǎo)入文件指明要導(dǎo)入的文件格式 啟動(dòng)MongoDB $mongod --fork --logpath=/data/log/r3.log--fork 允許mongod后臺(tái)運(yùn)行,但是必須指定日志記錄文件路徑(Enables a daemon mod...

    joywek 評(píng)論0 收藏0
  • 使用Pandas&NumPy進(jìn)行數(shù)據(jù)清洗的6大常用方法

    摘要:在這個(gè)教程中,我們將利用的和包來(lái)進(jìn)行數(shù)據(jù)清洗。在很多情況下,使用唯一的值作為索引值識(shí)別數(shù)據(jù)字段是非常有幫助的。清洗數(shù)據(jù)字段到現(xiàn)在為止,我們移除了不必要的列并改變了我們的索引變得更有意義。 作者:xiaoyu微信公眾號(hào):Python數(shù)據(jù)科學(xué)知乎:Python數(shù)據(jù)分析師 數(shù)據(jù)科學(xué)家花了大量的時(shí)間清洗數(shù)據(jù)集,并將這些數(shù)據(jù)轉(zhuǎn)換為他們可以處理的格式。事實(shí)上,很多數(shù)據(jù)科學(xué)家聲稱開(kāi)始獲取和清洗數(shù)據(jù)...

    siberiawolf 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<