欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中CSV文件處理全攻略

 更新時間:2025年05月18日 14:46:21   作者:tekin  
在數(shù)據(jù)處理和存儲領(lǐng)域,CSV格式憑借其簡單高效的特性,成為了電子表格和數(shù)據(jù)庫中常用的文件格式,Python 的csv模塊為操作 CSV 文件提供了強大的支持,本文將深入剖析csv模塊,幫助讀者全面掌握 CSV 文件的讀寫操作,需要的朋友可以參考下

一、CSV 格式簡介

CSV 格式是一種以純文本形式存儲表格數(shù)據(jù)的文件格式,用特定分隔符(通常是逗號)隔開不同字段。例如,一條包含姓名、年齡和城市的記錄,在 CSV 文件中可能表示為"Alice,25,New York"。雖然 CSV 格式被廣泛應(yīng)用,但由于缺乏統(tǒng)一標準,不同應(yīng)用程序生成的 CSV 文件在格式細節(jié)上可能存在差異,這給數(shù)據(jù)處理帶來了挑戰(zhàn)。不過,其大致結(jié)構(gòu)相似,使得編寫通用處理模塊成為可能。

二、csv模塊核心內(nèi)容

(一)模塊函數(shù)

  • csv.reader(csvfile, dialect='excel', \**fmtparams):該函數(shù)用于創(chuàng)建一個reader對象,從給定的csvfile中讀取數(shù)據(jù)。csvfile可以是文件對象或包含字符串的可迭代對象,打開文件時需設(shè)置newline=''。dialect參數(shù)指定 CSV 變種,默認為'excel',也可通過list_dialects()函數(shù)獲取已注冊變種名稱或自定義Dialect子類實例來設(shè)置。fmtparams用于覆蓋當前變種的單個格式參數(shù)。例如:
import csv
with open('eggs.csv', newline='') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
    for row in spamreader:
        print(', '.join(row))
  • csv.writer(csvfile, dialect='excel', \**fmtparams):返回一個writer對象,將數(shù)據(jù)轉(zhuǎn)換為帶分隔符的字符串寫入csvfile。csvfile需具有write()方法,打開文件時同樣要設(shè)置newline=''。dialect和fmtparams作用與reader函數(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'])
  • 其他函數(shù):csv.register_dialect(name, [dialect, **fmtparams])用于注冊自定義 CSV 變種;csv.unregister_dialect(name)刪除已注冊變種;csv.get_dialect(name)獲取指定變種;csv.list_dialects()返回所有已注冊變種名稱;csv.field_size_limit([new_limit])獲取或設(shè)置解析器允許的最大字段大小。

(二)模塊類

  • csv.DictReader(f, fieldnames=None, restkey=None, restval=None, dialect='excel', \*args, \**kwds):創(chuàng)建的對象類似常規(guī)reader,但將每行數(shù)據(jù)映射為字典,鍵由fieldnames指定。若fieldnames未提供,則文件第一行數(shù)據(jù)用作字段名并從結(jié)果中去除;若提供了,則第一行數(shù)據(jù)包含在結(jié)果中。多余字段數(shù)據(jù)會存儲在以restkey為鍵的列表中(默認為None),缺失字段用restval填充(默認為None)。例如:
import csv
with open('names.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(row['first_name'], row['last_name'])
  1. csv.Dialect:是一個容器類,通過其屬性定義 CSV 文件的格式處理方式,如雙引號、空白符、分隔符等的處理規(guī)則。不同的Dialect子類對應(yīng)不同的 CSV 文件格式變種,例如csv.excel定義了 Excel 生成的 CSV 文件的常規(guī)屬性,csv.excel_tab對應(yīng) Excel 生成的制表符分隔的 CSV 文件,csv.unix_dialect適用于 UNIX 系統(tǒng)生成的 CSV 文件(以'\n'為換行符,所有字段用引號包圍) 。
  2. csv.Sniffer:用于推斷 CSV 文件的格式。sniff(sample, delimiters=None)方法分析給定樣本數(shù)據(jù),返回包含格式參數(shù)的Dialect子類;has_header(sample)方法判斷樣本數(shù)據(jù)首行是否為列標題,但這是一個粗略的啟發(fā)式方法,可能出現(xiàn)誤判。使用示例:
with open('example.csv', newline='') as csvfile:
    dialect = csv.Sniffer().sniff(csvfile.read(1024))
    csvfile.seek(0)
    reader = csv.reader(csvfile, dialect)
    # 處理CSV文件內(nèi)容

(三)模塊常量

csv模塊定義了多個常量,用于控制writerreader對象的引號處理行為。如csv.QUOTE_ALL指示writer給所有字段加引號;csv.QUOTE_MINIMAL僅為包含特殊字符的字段加引號;csv.QUOTE_NONNUMERIC為非數(shù)字字段加引號,并讓reader將未加引號的字段轉(zhuǎn)換為float類型;csv.QUOTE_NONE不使用引號引出字段,輸出數(shù)據(jù)中定界符前需加轉(zhuǎn)義符;csv.QUOTE_NOTNULL為不為None的字段加引號;csv.QUOTE_STRINGS總是為字符串字段加引號 。需要注意的是,在 Python 3.12 中,QUOTE_NOTNULLQUOTE_STRINGSreader對象的行為存在 bug,該問題在 Python 3.13 中得到修復。

(四)模塊異常

csv.Error異常由csv模塊中發(fā)生錯誤的函數(shù)拋出,在編寫代碼處理 CSV 文件時,可通過捕獲該異常來處理可能出現(xiàn)的錯誤,如文件格式錯誤、字段解析錯誤等。例如:

import csv, sys
filename ='some.csv'
with open(filename, newline='') as f:
    reader = csv.reader(f)
    try:
        for row in reader:
            print(row)
    except csv.Error as e:
        sys.exit(f'file {filename}, line {reader.line_num}: {e}')

三、變種與格式參數(shù)

不同的 CSV 文件可能在分隔符、引號處理、行終止符等格式上存在差異,csv模塊通過Dialect類的子類和格式參數(shù)來應(yīng)對這些差異。Dialect類支持以下屬性:

屬性名描述默認值
delimiter字段分隔符,單字符','
doublequote控制字段中引號字符的引出方式,True表示雙寫引號字符,False表示在引號字符前加轉(zhuǎn)義符True
escapechar用于轉(zhuǎn)義定界符(quotingQUOTE_NONE時)或引號字符(doublequoteFalse時)的單字符None(禁用轉(zhuǎn)義)
lineterminatorwriter產(chǎn)生的行的結(jié)尾字符'\r\n'
quotechar用于包住含有特殊字符字段的單字符'"'
quoting控制writer生成引號和reader識別引號的時機,可設(shè)為QUOTE_*常量QUOTE_MINIMAL
skipinitialspace是否忽略緊跟在分隔符后的空格False
strict輸入錯誤的 CSV 時是否拋出Error異常False

在創(chuàng)建readerwriter對象時,可以指定dialect參數(shù)(字符串或Dialect子類實例),也可以單獨指定格式參數(shù)來覆蓋dialect中的默認設(shè)置。

四、Reader 對象與 Writer 對象

(一)Reader 對象

Reader對象(包括DictReader實例和reader()函數(shù)返回的對象)用于讀取 CSV 數(shù)據(jù)。它具有以下方法和屬性:

  1. 方法__next__()方法返回可迭代對象的下一行數(shù)據(jù),根據(jù)當前Dialect解析,可通過next(reader)調(diào)用。
  2. 屬性dialect屬性為只讀,用于獲取當前解析使用的變種描述;line_num屬性記錄源迭代器已讀取的行數(shù),與返回的記錄數(shù)可能不同,因為記錄可能跨越多行。DictReader對象還有fieldnames屬性,用于獲取字段名稱,若創(chuàng)建對象時未傳入,則在首次訪問或讀取第一條記錄時初始化。

(二)Writer 對象

Writer對象(包括DictWriter實例和writer()函數(shù)返回的對象)負責將數(shù)據(jù)寫入 CSV 文件。其方法和屬性如下:

  1. 方法writerow(row)方法將row寫入文件對象,按當前Dialect格式化,返回底層文件對象write方法的返回值;writerows(rows)方法將rows中的所有元素寫入文件對象。DictWriter對象的writeheader()方法用于寫入一行字段名稱(構(gòu)造函數(shù)中指定),返回csvwriter.writerow()方法的返回值。
  2. 屬性dialect屬性為只讀,供writer使用,用于獲取當前寫入使用的變種描述。

五、實際應(yīng)用示例

(一)基本讀寫操作

  1. 讀取 CSV 文件:使用csv.reader讀取文件,逐行打印數(shù)據(jù)。
import csv
with open('some.csv', newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
  • 寫入 CSV 文件:利用csv.writer將數(shù)據(jù)寫入文件。
import csv
with open('some.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows([['data1', 'data2'], ['data3', 'data4']])

(二)處理特殊格式文件

處理非標準 CSV 格式文件時,需根據(jù)文件格式特點設(shè)置相應(yīng)的參數(shù)。例如,處理以冒號為分隔符且不使用引號的文件:

import csv
with open('passwd', newline='') as f:
    reader = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE)
    for row in reader:
        print(row)

(三)注冊自定義變種

若項目中頻繁使用特定格式的 CSV 文件,可注冊自定義變種。例如:

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

(四)處理字符串數(shù)據(jù)

雖然csv模塊不直接支持解析字符串,但可以通過將字符串包裝成可迭代對象來處理。例如:

import csv
for row in csv.reader(['one,two,three']):
    print(row)

總結(jié)

Python 的csv模塊為 CSV 文件處理提供了全面且靈活的工具。通過掌握csv模塊的函數(shù)、類、常量以及變種與格式參數(shù)的設(shè)置,開發(fā)者能夠高效地讀取、寫入和處理各種格式的 CSV 文件。在實際應(yīng)用中,要根據(jù) CSV 文件的具體格式特點選擇合適的方法和參數(shù),同時注意處理可能出現(xiàn)的錯誤情況,確保數(shù)據(jù)處理的準確性和穩(wěn)定性。

以上就是Python中CSV文件處理全攻略的詳細內(nèi)容,更多關(guān)于Python CSV文件處理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Python畫股票的K線圖的方法步驟

    使用Python畫股票的K線圖的方法步驟

    這篇文章主要介紹了使用Python畫股票的K線圖的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • Python數(shù)據(jù)分析之?Pandas?Dataframe修改和刪除及查詢操作

    Python數(shù)據(jù)分析之?Pandas?Dataframe修改和刪除及查詢操作

    這篇文章主要介紹了Python數(shù)據(jù)分析之?Pandas?Dataframe修改和刪除及查詢操作的相關(guān)資料,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • keras分類之二分類實例(Cat and dog)

    keras分類之二分類實例(Cat and dog)

    這篇文章主要介紹了keras分類之二分類實例(Cat and dog),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python編寫單元測試代碼實例

    Python編寫單元測試代碼實例

    這篇文章主要介紹了Python編寫單元測試代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • python enumerate內(nèi)置函數(shù)用法總結(jié)

    python enumerate內(nèi)置函數(shù)用法總結(jié)

    這篇文章主要介紹了python enumerate內(nèi)置函數(shù)用法總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • 詳解python中init方法和隨機數(shù)方法

    詳解python中init方法和隨機數(shù)方法

    這篇文章主要介紹了python中init方法和隨機數(shù)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • python以環(huán)狀形式組合排列圖片并輸出的方法

    python以環(huán)狀形式組合排列圖片并輸出的方法

    這篇文章主要介紹了python以環(huán)狀形式組合排列圖片并輸出的方法,涉及Python使用pil庫操作圖片的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • python使用fork實現(xiàn)守護進程的方法

    python使用fork實現(xiàn)守護進程的方法

    守護進程(Daemon)也稱為精靈進程是一種生存期較長的一種進程。它們獨立于控制終端并且周期性的執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。他們常常在系統(tǒng)引導裝入時啟動,在系統(tǒng)關(guān)閉時終止。
    2017-11-11
  • pytorch中的優(yōu)化器optimizer.param_groups用法

    pytorch中的優(yōu)化器optimizer.param_groups用法

    這篇文章主要介紹了pytorch中的優(yōu)化器optimizer.param_groups用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python學習筆記之多進程

    python學習筆記之多進程

    這篇文章主要介紹了python多進程的的相關(guān)資料,文中講解非常細致,幫助大家更好的理解和學習Python,感興趣的朋友可以了解下
    2020-08-08

最新評論