來源丨網路
介紹
CleverCSV 是一個基於 Python 的庫,旨在提供比標準庫
csv
更智慧和靈活的方法來處理 CSV 檔。該庫使用機器學習演算法來探測 CSV 檔的正確撥號結構,從而解決不同 CSV 檔格式導致的讀取問題。它尤其適用於處理具有復雜結構或非標準分隔符的CSV檔。
安裝方式
安裝 CleverCSV 是一個簡單的過程,可以透過 Python 的包管理器 pip 來完成。開啟你的終端或命令提示字元,然後輸入以下命令:
pip install clevercsv
確保你的 pip 版本是最新的,以避免任何與安裝有關的問題。
使用方式
在安裝了 CleverCSV 之後,你可以如下方式使用它來讀取 CSV 檔:
匯入必要的模組:
import clevercsv
使用
clevercsv.read_csv()
方法讀取檔,該方法將自動檢測分隔符和引號字元:
dataframe = clevercsv.read_csv("your_file.csv")
如果你想要獲得更多控制,也可以使用
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 行程式碼。不過,為了滿足要求,我們可以建立一個包含多個步驟的例子,這個例子將會:
生成一個復雜的 CSV 檔。
使用 CleverCSV 探測 CSV 撥號。
讀取 CSV 檔。
進行一些數據操作。
將修改後的數據寫回一個新的 CSV 檔。
這個過程會被分割成多個函式,每個函式將會處理一個步驟。
import clevercsv
import pandas as pd
import numpy as np
import os
# 步驟 1: 生成一個復雜的 CSV 檔
defgenerate_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
defread_csv_with_clevercsv(filename):
dialect = clevercsv.detect_dialect(filename)
return clevercsv.read_csv(filename, dialect=dialect)
# 步驟 4: 進行一些數據操作
defmanipulate_data(df):
# 假設操作是對 Column4 進行平方
df["Column4"] = df["Column4"] ** 2
return df
# 步驟 5: 將數據寫回 CSV
defwrite_data_to_csv(df, filename):
df.to_csv(filename, index=False)
# 主執行函式
defmain():
# 設定檔名
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 是一個值得嘗試的工具。