簡體   English   中英

如何讀取具有列分隔符以及記錄分隔符的csv文件

[英]How to read csv file which has column delimiter as well record delimiter

我的CSV文件有3列:名稱,年齡和性別,樣本數據為:

AlexÇ39ÇM
#Ç#SheebaÇ35ÇF
#Ç#RiyaÇ10ÇF

列定界符為“Ç”,記錄定界符為“#Ç#”。 請注意,第一個記錄沒有記錄定界符(#Ç#),但是所有其他記錄都有記錄定界符(#Ç#)。 您能否告訴我如何讀取此文件並將其存儲在數據框中?

csvpandas模塊都支持直接讀取csv文件。 但是,由於在進一步處理之前需要逐行修改文件內容,因此建議逐行讀取文件,根據需要修改每一行,並將處理后的數據存儲在列表中以進行進一步處理。

必要步驟包括:

  • 打開文件
  • 逐行讀取文件
  • 刪除換行符(使用readlines()時是行的一部分readlines()
  • 替換記錄定界符(因為一條記錄等效於一行)
  • 在列定界符處分割線

由於.split()返回字符串元素的列表,因此我們獲得了列表的總體列表,其中每個“子列表”都包含/表示行/記錄的數據。 可以通過pandas.DataFrame.from_records()讀取這樣格式化的數據,這在當時很方便:

import pandas as pd

with open('myData.csv') as file:
    # `.strip()` removes newline character from each line
    # `.replace('#;#', '')` removes '#;#' from each line
    # `.split(';')` splits at given string and returns a list with the string elements
    lines = [line.strip().replace('#;#', '').split(';') for line in file.readlines()]

df = pd.DataFrame.from_records(lines, columns=['Name', 'Age', 'Sex'])

print(df)

備注:

  1. 我將Ç更改為; 由於編碼問題,對我來說效果更好。 但是,該算法的基本思想仍然相同。

  2. 像這樣手動讀取數據可能會占用大量資源,這在處理較大文件時可能會出現問題。 可能還有更優雅的方式,我不知道。 如果遇到性能問題,請嘗試分塊讀取文件或尋求更有效的實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM