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

Python讀取CSV的四種方式實(shí)現(xiàn)與對比

 更新時間:2025年08月26日 09:54:49   作者:小莊-Python辦公  
CSV(Comma-Separated Values)是一種常見的數(shù)據(jù)交換格式,Python提供了多種讀取CSV文件的方法,下面就跟隨小編一起詳細(xì)一下具體的實(shí)現(xiàn)方法吧

概述

CSV(Comma-Separated Values)是一種常見的數(shù)據(jù)交換格式。Python提供了多種讀取CSV文件的方法,每種方法都有其特點(diǎn)和適用場景。

方法一:使用csv模塊(內(nèi)置)

1.1 csv.reader()

import csv

with open('data.csv', 'r', encoding='utf-8') as file:
    csv_reader = csv.reader(file)
    headers = next(csv_reader)  # 讀取表頭
    for row in csv_reader:
        print(row)  # 每行是一個列表

特點(diǎn):

  • Python內(nèi)置,無需安裝額外庫
  • 內(nèi)存占用小,適合大文件
  • 逐行讀取,節(jié)省內(nèi)存
  • 功能相對簡單

1.2 csv.DictReader()

import csv

with open('data.csv', 'r', encoding='utf-8') as file:
    csv_reader = csv.DictReader(file)
    for row in csv_reader:
        print(row['column_name'])  # 通過列名訪問

特點(diǎn):

  • 可以通過列名訪問數(shù)據(jù)
  • 代碼更易讀
  • 內(nèi)存占用比reader()稍大

方法二:使用pandas庫

2.1 基本用法

import pandas as pd

df = pd.read_csv('data.csv')
print(df.head())  # 顯示前5行

2.2 高級參數(shù)

df = pd.read_csv(
    'data.csv',
    encoding='utf-8',           # 編碼
    sep=',',                    # 分隔符
    header=0,                   # 表頭行
    index_col=0,                # 索引列
    usecols=['col1', 'col2'],   # 指定列
    nrows=1000,                 # 讀取行數(shù)
    skiprows=1,                 # 跳過行數(shù)
    na_values=['NULL', ''],     # 空值標(biāo)識
    dtype={'col1': str}         # 數(shù)據(jù)類型
)

特點(diǎn):

  • 功能強(qiáng)大,參數(shù)豐富
  • 支持?jǐn)?shù)據(jù)分析和處理
  • 與其他數(shù)據(jù)科學(xué)庫集成好
  • 需要安裝pandas
  • 內(nèi)存占用較大

方法三:使用numpy庫

3.1 numpy.loadtxt()

import numpy as np

# 適用于純數(shù)值數(shù)據(jù)
data = np.loadtxt('data.csv', delimiter=',', skiprows=1)

3.2 numpy.genfromtxt()

import numpy as np

data = np.genfromtxt(
    'data.csv',
    delimiter=',',
    names=True,              # 使用第一行作為列名
    dtype=None,              # 自動推斷類型
    encoding='utf-8'
)

特點(diǎn):

  • 處理數(shù)值數(shù)據(jù)性能高
  • 內(nèi)存效率好
  • 主要適用于數(shù)值數(shù)據(jù)
  • 文本處理能力有限

方法四:手動解析

with open('data.csv', 'r', encoding='utf-8') as file:
    lines = file.readlines()

headers = lines[0].strip().split(',')
data = []
for line in lines[1:]:
    row = line.strip().split(',')
    data.append(row)

特點(diǎn):

  • 完全可控,靈活性高
  • 可處理特殊格式
  • 代碼復(fù)雜,容易出錯
  • 需要處理各種邊界情況

特殊情況處理

處理編碼問題

def read_csv_auto_encoding(filename):
    encodings = ['utf-8', 'gbk', 'gb2312', 'utf-16']
    for encoding in encodings:
        try:
            return pd.read_csv(filename, encoding=encoding)
        except UnicodeDecodeError:
            continue
    return None

處理大文件(分塊讀?。?/h3>
chunk_list = []
for chunk in pd.read_csv('large_file.csv', chunksize=1000):
    # 處理每個塊
    chunk_list.append(chunk)

df = pd.concat(chunk_list, ignore_index=True)

處理復(fù)雜CSV(包含引號、逗號)

import csv

with open('complex.csv', 'r') as file:
    reader = csv.reader(file, quotechar='"', delimiter=',', quoting=csv.QUOTE_ALL)
    for row in reader:
        print(row)

方法選擇指南

場景推薦方法理由
數(shù)據(jù)分析pandas功能強(qiáng)大,生態(tài)完善
簡單讀取csv模塊內(nèi)置庫,輕量級
數(shù)值計算numpy性能優(yōu)秀
大文件處理csv模塊 + 逐行處理內(nèi)存友好
特殊格式手動解析靈活可控
快速原型pandas開發(fā)效率高

性能對比

方法內(nèi)存占用處理速度功能豐富度學(xué)習(xí)成本
csv模塊
pandas
numpy
手動解析自定義

最佳實(shí)踐

優(yōu)先使用pandas:除非有特殊需求,pandas是最佳選擇

注意編碼問題:中文數(shù)據(jù)常用utf-8或gbk編碼

處理大文件:使用分塊讀取或csv模塊

數(shù)據(jù)驗(yàn)證:讀取后檢查數(shù)據(jù)完整性

異常處理:添加適當(dāng)?shù)腻e誤處理機(jī)制

示例代碼

# Python讀取CSV的幾種方式

# 1. 使用csv模塊(Python內(nèi)置)
import csv

# 方法1.1: 使用csv.reader()讀取
def read_csv_with_reader(filename):
    """
    使用csv.reader()逐行讀取CSV文件
    適用于:簡單的CSV文件讀取,內(nèi)存占用小
    """
    with open(filename, 'r', encoding='utf-8') as file:
        csv_reader = csv.reader(file)
        # 讀取表頭
        headers = next(csv_reader)
        print(f"表頭: {headers}")
        
        # 讀取數(shù)據(jù)行
        for row in csv_reader:
            print(row)

# 方法1.2: 使用csv.DictReader()讀取
def read_csv_with_dictreader(filename):
    """
    使用csv.DictReader()將每行轉(zhuǎn)換為字典
    適用于:需要按列名訪問數(shù)據(jù)的場景
    """
    with open(filename, 'r', encoding='utf-8') as file:
        csv_reader = csv.DictReader(file)
        for row in csv_reader:
            print(row)  # 每行是一個字典
            # 可以通過列名訪問:row['column_name']

# 2. 使用pandas庫(需要安裝:pip install pandas)
import pandas as pd

# 方法2.1: 基本讀取
def read_csv_with_pandas_basic(filename):
    """
    使用pandas讀取CSV文件
    適用于:數(shù)據(jù)分析、處理大量數(shù)據(jù)
    """
    df = pd.read_csv(filename)
    print(df.head())  # 顯示前5行
    return df

# 方法2.2: 帶參數(shù)的讀取
def read_csv_with_pandas_advanced(filename):
    """
    使用pandas的高級參數(shù)讀取CSV
    """
    df = pd.read_csv(
        filename,
        encoding='utf-8',      # 指定編碼
        sep=',',               # 分隔符
        header=0,              # 表頭行號
        index_col=0,           # 索引列
        usecols=['col1', 'col2'],  # 只讀取指定列
        nrows=1000,            # 只讀取前1000行
        skiprows=1,            # 跳過第1行
        na_values=['NULL', ''],  # 指定空值表示
        dtype={'col1': str}    # 指定列的數(shù)據(jù)類型
    )
    return df

# 3. 使用numpy庫(需要安裝:pip install numpy)
import numpy as np

# 方法3.1: 使用numpy.loadtxt()
def read_csv_with_numpy_loadtxt(filename):
    """
    使用numpy.loadtxt()讀取數(shù)值型CSV
    適用于:純數(shù)值數(shù)據(jù),性能要求高
    """
    data = np.loadtxt(filename, delimiter=',', skiprows=1)  # 跳過表頭
    return data

# 方法3.2: 使用numpy.genfromtxt()
def read_csv_with_numpy_genfromtxt(filename):
    """
    使用numpy.genfromtxt()讀取CSV(更靈活)
    適用于:包含缺失值的數(shù)值數(shù)據(jù)
    """
    data = np.genfromtxt(
        filename,
        delimiter=',',
        names=True,           # 第一行作為列名
        dtype=None,           # 自動推斷數(shù)據(jù)類型
        encoding='utf-8',
        missing_values='',    # 缺失值標(biāo)識
        filling_values=0      # 缺失值填充
    )
    return data

# 4. 使用內(nèi)置open()函數(shù)手動解析
def read_csv_manually(filename):
    """
    手動解析CSV文件
    適用于:特殊格式的CSV或需要自定義解析邏輯
    """
    with open(filename, 'r', encoding='utf-8') as file:
        lines = file.readlines()
        
    # 解析表頭
    headers = lines[0].strip().split(',')
    
    # 解析數(shù)據(jù)
    data = []
    for line in lines[1:]:
        row = line.strip().split(',')
        data.append(row)
    
    return headers, data

# 5. 處理特殊情況的CSV

# 方法5.1: 處理不同編碼的CSV
def read_csv_different_encoding(filename):
    """
    處理不同編碼的CSV文件
    """
    encodings = ['utf-8', 'gbk', 'gb2312', 'utf-16']
    
    for encoding in encodings:
        try:
            df = pd.read_csv(filename, encoding=encoding)
            print(f"成功使用 {encoding} 編碼讀取文件")
            return df
        except UnicodeDecodeError:
            continue
    
    print("無法確定文件編碼")
    return None

# 方法5.2: 處理大文件(分塊讀?。?
def read_large_csv_in_chunks(filename, chunk_size=1000):
    """
    分塊讀取大型CSV文件
    適用于:內(nèi)存不足以加載整個文件的情況
    """
    chunk_list = []
    
    for chunk in pd.read_csv(filename, chunksize=chunk_size):
        # 對每個塊進(jìn)行處理
        processed_chunk = chunk  # 這里可以添加處理邏輯
        chunk_list.append(processed_chunk)
    
    # 合并所有塊
    df = pd.concat(chunk_list, ignore_index=True)
    return df

# 方法5.3: 處理包含引號和逗號的CSV
def read_csv_with_quotes(filename):
    """
    處理包含引號和逗號的復(fù)雜CSV
    """
    with open(filename, 'r', encoding='utf-8') as file:
        csv_reader = csv.reader(file, quotechar='"', delimiter=',', quoting=csv.QUOTE_ALL)
        for row in csv_reader:
            print(row)

# 使用示例
if __name__ == "__main__":
    # 創(chuàng)建示例CSV文件
    sample_data = '''姓名,年齡,城市,薪資
張三,25,北京,8000
李四,30,上海,12000
王五,28,廣州,10000
趙六,35,深圳,15000'''
    
    with open('sample.csv', 'w', encoding='utf-8') as f:
        f.write(sample_data)
    
    print("=== 方法1: 使用csv.reader() ===")
    read_csv_with_reader('sample.csv')
    
    print("\n=== 方法2: 使用csv.DictReader() ===")
    read_csv_with_dictreader('sample.csv')
    
    print("\n=== 方法3: 使用pandas ===")
    df = read_csv_with_pandas_basic('sample.csv')
    print(df)
    
    print("\n=== 方法4: 手動解析 ===")
    headers, data = read_csv_manually('sample.csv')
    print(f"表頭: {headers}")
    print(f"數(shù)據(jù): {data}")

# 各種方法的對比總結(jié):
"""
1. csv模塊:
   - 優(yōu)點(diǎn):Python內(nèi)置,無需安裝額外庫,內(nèi)存占用小
   - 缺點(diǎn):功能相對簡單,不支持復(fù)雜的數(shù)據(jù)操作
   - 適用:簡單的CSV讀取,小文件處理

2. pandas:
   - 優(yōu)點(diǎn):功能強(qiáng)大,支持?jǐn)?shù)據(jù)分析和處理,參數(shù)豐富
   - 缺點(diǎn):需要安裝額外庫,內(nèi)存占用較大
   - 適用:數(shù)據(jù)分析,復(fù)雜的數(shù)據(jù)處理,大部分CSV處理場景

3. numpy:
   - 優(yōu)點(diǎn):處理數(shù)值數(shù)據(jù)性能高,內(nèi)存效率好
   - 缺點(diǎn):主要適用于數(shù)值數(shù)據(jù),對文本處理支持有限
   - 適用:純數(shù)值CSV文件,科學(xué)計算

4. 手動解析:
   - 優(yōu)點(diǎn):完全可控,可以處理特殊格式
   - 缺點(diǎn):代碼復(fù)雜,容易出錯,需要處理各種邊界情況
   - 適用:特殊格式的CSV,需要自定義解析邏輯

選擇建議:
- 數(shù)據(jù)分析:首選pandas
- 簡單讀?。菏褂胏sv模塊
- 數(shù)值計算:考慮numpy
- 特殊需求:手動解析
"""

以上就是Python讀取CSV的四種方式實(shí)現(xiàn)與對比的詳細(xì)內(nèi)容,更多關(guān)于Python讀取CSV的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Pytorch 神經(jīng)網(wǎng)絡(luò)—自定義數(shù)據(jù)集上實(shí)現(xiàn)教程

    Pytorch 神經(jīng)網(wǎng)絡(luò)—自定義數(shù)據(jù)集上實(shí)現(xiàn)教程

    今天小編就為大家分享一篇Pytorch 神經(jīng)網(wǎng)絡(luò)—自定義數(shù)據(jù)集上實(shí)現(xiàn)教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 如何將你的應(yīng)用遷移到Python3的三個步驟

    如何將你的應(yīng)用遷移到Python3的三個步驟

    這篇文章主要介紹了如何將你的應(yīng)用遷移到Python3的三個步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • CentOS7.3編譯安裝Python3.6.2的方法

    CentOS7.3編譯安裝Python3.6.2的方法

    本篇文章主要介紹了CentOS7.3編譯安裝Python3.6.2的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Django + Uwsgi + Nginx 實(shí)現(xiàn)生產(chǎn)環(huán)境部署的方法

    Django + Uwsgi + Nginx 實(shí)現(xiàn)生產(chǎn)環(huán)境部署的方法

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比較常見的一種方式。這篇文章主要介紹了Django + Uwsgi + Nginx 實(shí)現(xiàn)生產(chǎn)環(huán)境部署,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Pycharm中python調(diào)用另一個文件類或者函數(shù)

    Pycharm中python調(diào)用另一個文件類或者函數(shù)

    本文主要介紹了Pycharm中python調(diào)用另一個文件類或者函數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • python實(shí)現(xiàn)隨機(jī)加減法生成器

    python實(shí)現(xiàn)隨機(jī)加減法生成器

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)隨機(jī)加減法生成器,練手小項目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 詳解python里使用正則表達(dá)式的分組命名方式

    詳解python里使用正則表達(dá)式的分組命名方式

    這篇文章主要介紹了詳解python里使用正則表達(dá)式的分組命名方式的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • Python批量圖片去水印的方法

    Python批量圖片去水印的方法

    ​平常工作中,有時為了采用網(wǎng)絡(luò)的一些素材,但這些素材往往被打了水印,如果我們不懂PS就無法去掉水印,或者無法批量去掉水印。本文就介紹了Python批量圖片去水印的方法,感興趣的可以了解一下
    2021-05-05
  • python實(shí)現(xiàn)在cmd窗口顯示彩色文字

    python實(shí)現(xiàn)在cmd窗口顯示彩色文字

    今天小編就為大家分享一篇python實(shí)現(xiàn)在cmd窗口顯示彩色文字,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python自動化之UnitTest框架實(shí)戰(zhàn)記錄

    Python自動化之UnitTest框架實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于Python自動化之UnitTest框架實(shí)戰(zhàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評論