繁体   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