最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中CSV文件的讀寫(xiě)庫(kù)操作方法

 更新時(shí)間:2022年12月05日 09:00:49   作者:凍羊的小屋  
Python 中提供了一個(gè)官方的標(biāo)準(zhǔn)庫(kù)來(lái)處理這種文件類型,那就是 CSV 庫(kù),這篇文章主要介紹了Python中CSV文件的讀寫(xiě)庫(kù),需要的朋友可以參考下

CSV 格式的全稱是 Comma Separated Values,意思是逗號(hào)分割的數(shù)據(jù),是最常見(jiàn)的電子表格和數(shù)據(jù)庫(kù)的導(dǎo)出格式之一,在 RFC 4180 中已經(jīng)成為了一種標(biāo)準(zhǔn)格式。Python 中提供了一個(gè)官方的標(biāo)準(zhǔn)庫(kù)來(lái)處理這種文件類型,那就是 CSV 庫(kù)。

官方文檔在此:CSV

文件的基本讀寫(xiě)

文件的讀寫(xiě)主要使用 csv.reader 和 csv.writer 來(lái)完成,它的定義如下:

csv.reader(csvfile, dialect='excel', **fmtparams)
  • csvfile:返回字符串的迭代器,一般是 open 函數(shù)返回的文件對(duì)象
  • dialect:用來(lái)讀取非標(biāo)準(zhǔn) csv 格式的指定參數(shù),這部分參考下文
  • **fmtparams:用來(lái)指定格式的參數(shù),這部分的詳細(xì)參數(shù)參考下文

最簡(jiǎn)單、最常用的使用方法是將 open 函數(shù)返回的文件對(duì)象直接丟給 csv.reader 就會(huì)得到一個(gè)每次返回一個(gè)拆分后的字符串列表的迭代器:

import csv
with open('file.csv', 'r') as input_file:
    file_content = csv.reader(input_file, delemiter=',')
    for row in file_content:
        # code here
        pass

類似地,對(duì)文件的寫(xiě)操作與原生方法類似:

import csv
with open('file.csv', 'w', newline='') as output_file:
    file_writer = csv.writer(output_file, delimiter=',')
    file_writer.writerow(['Spam'] * 5 + ['Baked Beans'])
    file_writer.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

用字典模式處理數(shù)據(jù)

有時(shí)候,我們可能需要將數(shù)據(jù)讀取成字典(例如要上傳到 MongoDB 的時(shí)候),這時(shí)候我們可以使用 csv.DictReader 將表格形式的數(shù)據(jù)讀取為字典形式的數(shù)據(jù)。

這個(gè)函數(shù)的參數(shù)如下:

csv.DictReader(
    f,
    fieldnames=None,
    restkey=None, restval=None,
    dialect='excel',
    *args, **kwds
)
  • f:可迭代對(duì)象或者文件對(duì)象
  • fieldnames:一個(gè)有序列表,代表字典中的字段(一般是文件的列名),如果不指定,就用文件的第一行的字符串來(lái)作為字段的名字
  • restkey:如果列名的數(shù)量少于內(nèi)容的列數(shù),那么剩下的列就會(huì)被統(tǒng)一放到一個(gè)字段里,這里的 restkey 就是這個(gè)字段的名字,默認(rèn)為 None
  • restval:與 restkey 類似,如果內(nèi)容的列數(shù)少于列名的數(shù)量,那么內(nèi)容中缺少的列就會(huì)被填充,這個(gè)參數(shù)指定用來(lái)填充的值,默認(rèn)為 None
  • 其他的參數(shù)與 csv.reader 相同

一個(gè)簡(jiǎn)單的示例如下:

import csv
with open('file.csv') as input_file:
    reader = csv.DictReader(input_file)
    for row in reader:
        print(row['first_name'], row['last_name'])

# Eric Idle
# John Cleese

print(row)
# {'first_name': 'John', 'last_name': 'Cleese'}

類似地,字典的寫(xiě)通過(guò) csv.DictWriter 來(lái)完成,這個(gè)函數(shù)將字典類型的數(shù)據(jù)輸出為表格形式的數(shù)據(jù),csv.DictWriter 的參數(shù)如下:

csv.DictWriter(
    f,
    fieldnames,
    restval='', extrasaction='raise',
    dialect='excel',
    *args, **kwds
)

與 csv.DictWriter 類似,fieldnames 指定所有的字段名稱,restval 用來(lái)指定當(dāng)指定字段有缺失值的時(shí)候用來(lái)填充的內(nèi)容,extrasaction 參數(shù)用來(lái)指定內(nèi)容缺少字段時(shí)的操作,默認(rèn)會(huì) 'raise',即引發(fā)一個(gè) ValueError 異常,可以設(shè)置為 'ignore',對(duì)應(yīng)著忽略額外值,一個(gè)示例如下:

import csv

with open('names.csv', 'w', newline='') as output_file:
    fieldnames = ['first_name', 'last_name']
    writer = csv.DictWriter(output_file, fieldnames=fieldnames)
    # 將
    writer.writeheader()
    writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
    writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
    writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})

非標(biāo)準(zhǔn)格式的處理

有時(shí)候,csv 的文件可能不是標(biāo)準(zhǔn)的 csv 文件,無(wú)法直接讀取,這時(shí)候我們需要指定一些額外參數(shù)來(lái)處理這些情況,這種情況下需要用到 dialect 功能,這個(gè)功能包含若干類和若干函數(shù)來(lái)幫助我們實(shí)現(xiàn)我們的目的。

dialect

默認(rèn)情況下,三個(gè) dialect 類型是內(nèi)置的,分別是 'unix'、'excel'、和 'excel_tab'。'unix' 模式用來(lái)處理在 Unix 系統(tǒng)下生成的文件,而 'excel' 模式用來(lái)處理 excel 生成的 csv 文件,最后的 'excel_tab' 用來(lái)處理 excel 生成的制表符分割的文件,這三種預(yù)設(shè)已經(jīng)覆蓋了絕大多數(shù)的使用場(chǎng)景。

用戶可以使用 Dialect 類來(lái)自定格式的處理:

csv.register_dialect(
    'unixpwd',
    delimiter=',',
    quoting=csv.QUOTE_MINIMAL,
    quotechar='"',
    doublequote=True,
    escapechar=None,
    lineterminator='\r\n',
    skipinitialspace=False,
    strict=False
)
  • name:自定義的格式名稱
  • delimiter:用來(lái)分割各字段的字符,默認(rèn)為 ,
  • doublequote:沒(méi)啥用,看不懂,待補(bǔ)充
  • escapechar:沒(méi)啥用,一般不用
  • lineterminator:換行符,默認(rèn)是 '\r\n'
  • quotechar:當(dāng)字段含有特殊字符是,用來(lái)引用的符號(hào),默認(rèn)是 ",不用改,不常用
  • quoting:加引號(hào)的行為,可以選擇 QUOTE_ALL、QUOTE_MINIMALQUOTE_NONNUMERIC、QUOTE_NONE 四種行為
  • skipinitialspace:是否跳過(guò)分隔符后面的空格,默認(rèn)為 False
  • strict:嚴(yán)格模式,如果為 True,文件格式不對(duì)的時(shí)候會(huì)報(bào)錯(cuò)終止,否則會(huì)強(qiáng)制讀取

使用方法就是先使用csv.register_dialect注冊(cè)一個(gè)自定義dialect,然后在reader里面指定它:

import csv
csv.register_dialect(
    'unixpwd',
    delimiter=':',
    quoting=csv.QUOTE_NONE,
    ...
)
with open('passwd', newline='') as f:
    reader = csv.reader(f, 'unixpwd')

Sniffer

正如它的名字,sniffer 提供了對(duì)格式的自動(dòng)檢測(cè),并輸出一個(gè) dialect,提供了兩個(gè)函數(shù),分別是 has_header,用來(lái)檢測(cè)文件是否包含標(biāo)題行,和主函數(shù) sniff,這里通過(guò)一個(gè)例子來(lái)學(xué)習(xí)它的使用:

with open('example.csv', newline='') as csvfile:
    # 通過(guò)文件的前1024行來(lái)確定文件的格式規(guī)范
    dialect = csv.Sniffer().sniff(csvfile.read(1024))
    # 將指針重置,從文件開(kāi)始進(jìn)行讀取
    csvfile.seek(0)
    reader = csv.reader(csvfile, dialect)
    # ... process CSV file contents here ..

到此這篇關(guān)于Python中CSV文件的讀寫(xiě)庫(kù)的文章就介紹到這了,更多相關(guān)CSV文件的讀寫(xiě)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?wxPython庫(kù)實(shí)現(xiàn)文本框與按鈕交互

    Python?wxPython庫(kù)實(shí)現(xiàn)文本框與按鈕交互

    在Python的圖形用戶界面(GUI)開(kāi)發(fā)中,wxPython是一個(gè)功能強(qiáng)大的庫(kù),本文主要為大家介紹了如何使用wxPython庫(kù)實(shí)現(xiàn)文本框與按鈕交互,需要的可以了解下
    2025-01-01
  • 教你怎么用PyCharm為同一服務(wù)器配置多個(gè)python解釋器

    教你怎么用PyCharm為同一服務(wù)器配置多個(gè)python解釋器

    當(dāng)我們?cè)诜?wù)器上創(chuàng)建了多個(gè)虛擬環(huán)境時(shí),也可以在 PyCharm 中配置這些虛擬環(huán)境,方便不同的項(xiàng)目使用不同的環(huán)境,然而按照網(wǎng)上教程添加多個(gè)python解釋器后,PyCharm會(huì)自動(dòng)幫我們創(chuàng)建多個(gè)重復(fù)的服務(wù)器,本文主要給出該問(wèn)題的解決方法,同時(shí)也對(duì)添加解釋器做一個(gè)詳細(xì)的講解
    2021-05-05
  • Python中常用的數(shù)據(jù)結(jié)構(gòu)與算法優(yōu)化技巧指南

    Python中常用的數(shù)據(jù)結(jié)構(gòu)與算法優(yōu)化技巧指南

    Python是一種強(qiáng)大而靈活的編程語(yǔ)言,它提供了豐富的數(shù)據(jù)結(jié)構(gòu)和算法庫(kù),但是在處理大規(guī)模數(shù)據(jù)或者需要高效運(yùn)行的情況下,需要考慮一些優(yōu)化技巧,本文將介紹一些Python中常用的數(shù)據(jù)結(jié)構(gòu)與算法優(yōu)化技巧,需要的朋友可以參考下
    2024-05-05
  • Python實(shí)現(xiàn)的直接插入排序算法示例

    Python實(shí)現(xiàn)的直接插入排序算法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的直接插入排序算法,結(jié)合實(shí)例形式分析了Python直接插入排序算法的定義與使用相關(guān)操作技巧,代碼備有較為詳盡的注釋便于理解,需要的朋友可以參考下
    2018-04-04
  • Python密碼學(xué)概述雙倍強(qiáng)度加密教程

    Python密碼學(xué)概述雙倍強(qiáng)度加密教程

    這篇文章主要為大家介紹了Python密碼學(xué)概述雙倍強(qiáng)度加密教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2022-05-05
  • python hmac模塊驗(yàn)證客戶端的合法性

    python hmac模塊驗(yàn)證客戶端的合法性

    這篇文章主要介紹了python hmac模塊驗(yàn)證客戶端的合法性,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • PyTorch上實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)CNN的方法

    PyTorch上實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)CNN的方法

    本篇文章主要介紹了PyTorch上實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)CNN的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python計(jì)算當(dāng)前日期是一年中的第幾天的方法詳解

    Python計(jì)算當(dāng)前日期是一年中的第幾天的方法詳解

    在Python中,計(jì)算當(dāng)前日期是一年中的第幾天可以通過(guò)內(nèi)置的datetime模塊來(lái)實(shí)現(xiàn),本文將詳細(xì)介紹如何使用Python編寫(xiě)代碼來(lái)完成這個(gè)任務(wù),需要的可以參考下
    2023-12-12
  • Python偏函數(shù)Partial function使用方法實(shí)例詳解

    Python偏函數(shù)Partial function使用方法實(shí)例詳解

    這篇文章主要介紹了Python偏函數(shù)Partial function使用方法實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • python自動(dòng)定時(shí)任務(wù)schedule庫(kù)的使用方法

    python自動(dòng)定時(shí)任務(wù)schedule庫(kù)的使用方法

    當(dāng)你需要在 Python 中定期執(zhí)行任務(wù)時(shí),schedule 庫(kù)是一個(gè)非常實(shí)用的工具,它可以幫助你自動(dòng)化定時(shí)任務(wù),本文給大家介紹了python自動(dòng)定時(shí)任務(wù)schedule庫(kù)的使用方法,需要的朋友可以參考下
    2024-02-02

最新評(píng)論

华坪县| 望奎县| 永登县| 宁国市| 冀州市| 商南县| 苏尼特右旗| 木里| 灌阳县| 那坡县| 弥渡县| 关岭| 崇左市| 墨竹工卡县| 永川市| 乐至县| 平果县| 华亭县| 温州市| 通道| 吉安市| 宝坻区| 汉源县| 枣庄市| 林西县| 石河子市| 宿松县| 富锦市| 青铜峡市| 饶平县| 姜堰市| 金平| 兴业县| 武功县| 丹寨县| 响水县| 美姑县| 沧源| 闻喜县| 秦皇岛市| 博湖县|