天天看點

CleverCSV,一個神奇的 python 庫

作者:不秃頭程式員
CleverCSV,一個神奇的 python 庫

介紹

CleverCSV 是一個基于 Python 的庫,旨在提供比标準庫 csv 更智能和靈活的方法來處理 CSV 檔案。該庫使用機器學習算法來探測 CSV 檔案的正确撥号結構,進而解決不同 CSV 檔案格式導緻的讀取問題。它尤其适用于處理具有複雜結構或非标準分隔符的CSV檔案。

安裝方式

安裝 CleverCSV 是一個簡單的過程,可以通過 Python 的包管理器 pip 來完成。打開你的終端或指令提示符,然後輸入以下指令:

pip install clevercsv           

確定你的 pip 版本是最新的,以避免任何與安裝有關的問題。

CleverCSV,一個神奇的 python 庫

使用方式

在安裝了 CleverCSV 之後,你可以如下方式使用它來讀取 CSV 檔案:

  1. 導入必要的子產品:
import clevercsv           
  1. 使用 clevercsv.read_csv() 方法讀取檔案,該方法将自動檢測分隔符和引号字元:
dataframe = clevercsv.read_csv("your_file.csv")           
  1. 如果你想要獲得更多控制,也可以使用 clevercsv.detect_dialect() 方法來先檢測 CSV 的撥号,然後将這個撥号用在标準的 csv.reader 中:
dialect = clevercsv.detect_dialect("your_file.csv")
with open("your_file.csv", newline='') as csvfile:
    reader = csv.reader(csvfile, dialect=dialect)
    for row in reader:
        print(row)           

代碼示例

由于 CleverCSV 主要是用來自動檢測和讀取 CSV 檔案的,一個簡單的執行個體通常不會超過 150 行代碼。不過,為了滿足要求,我們可以建立一個包含多個步驟的例子,這個例子将會:

  1. 生成一個複雜的 CSV 檔案。
  2. 使用 CleverCSV 探測 CSV 撥号。
  3. 讀取 CSV 檔案。
  4. 進行一些資料操作。
  5. 将修改後的資料寫回一個新的 CSV 檔案。

這個過程會被分割成多個函數,每個函數将會處理一個步驟。

import clevercsv
import pandas as pd
import numpy as np
import os

# 步驟 1: 生成一個複雜的 CSV 檔案
def generate_complex_csv(filename, rows=100):
    data = {
        "Column1": np.random.rand(rows),
        "Column2;Column3": np.random.choice(['a', 'b', 'c', 'd'], size=(rows, 2), replace=True).tolist(),
        "Column4": np.random.randint(0, 100, size=rows)
    }
    df = pd.DataFrame(data)

    # 将 "Column2;Column3" 分割成兩列,并合并回資料框 
    df[["Column2", "Column3"]] = pd.DataFrame(df["Column2;Column3"].tolist(), index=df.index)
    df.drop("Column2;Column3", axis=1, inplace=True)

    # 将資料寫到 CSV 檔案中,使用 ";" 作為分隔符
    df.to_csv(filename, sep=';', index=False)

# 步驟 2 和 3: 探測撥号并讀取 CSV
def read_csv_with_clevercsv(filename):
    dialect = clevercsv.detect_dialect(filename)
    return clevercsv.read_csv(filename, dialect=dialect)

# 步驟 4: 進行一些資料操作
def manipulate_data(df):
    # 假設操作是對 Column4 進行平方
    df["Column4"] = df["Column4"] ** 2
    return df

# 步驟 5: 将資料寫回 CSV
def write_data_to_csv(df, filename):
    df.to_csv(filename, index=False)

# 主執行函數
def main():
    # 設定檔案名
    input_filename = 'complex_data.csv'
    output_filename = 'processed_data.csv'

    # 生成 CSV
    generate_complex_csv(input_filename)

    # 讀取 CSV 檔案
    df = read_csv_with_clevercsv(input_filename)
    print("Original Data:")
    print(df.head())

    # 資料操作
    manipulated_df = manipulate_data(df)
    print("\nManipulated Data:")
    print(manipulated_df.head())

    # 寫回新的 CSV 檔案
    write_data_to_csv(manipulated_df, output_filename)

    # 清理生成的檔案
    os.remove(input_filename)
    os.remove(output_filename)

if __name__ == "__main__":
    main()           

總結

CleverCSV 是一個非常有用的庫,它可以智能地處理多種格式的 CSV 檔案,特别是在結構不規則或分隔符不一緻的情況下。雖然 CleverCSV 不需要複雜的代碼來實作其基本功能,通過結合自定義的資料操作和處理流程,你仍然可以建立包含豐富邏輯的大型腳本。在處理未知或不規則的 CSV 資料時,CleverCSV 是一個值得嘗試的工具。