水平读取CSV文件并忽略换行符

时间:2019-03-18 21:40:30

标签: python pandas csv

好的,这是一个很奇怪的问题,但这是可行的。 我一直在阅读一个看起来像这样的csv文件:

Name,John,Susan,
Date,3/14/2019,3/14/2019
Job,Doctor,Cashier

每行的第一个字符串是我想添加到字典中的键,因此它看起来像这样:

{"Name": ["John", "Susan"], "Date": ["3/14/2019, "3/14/2019"], "Job": ["Doctor", "Cashier"]}

由于数据的水平方面,我一直在不使用CSV阅读器或熊猫的情况下进行所有操作,并且一切正常。问题是当我遇到如下所示的csv文件时:

Name,John,Susan,
Date,"3
/14/
2019",3/14/2019
Job,Doctor,Cashier

在读取数据时,它应该显示为“ 3 \ n / 14 / \ n2019”,但是我正在逐行读取文件,以便在不使用CSV eader或pandas的情况下进行读取,因此我拥有这个超级奇怪的算法在大约80%的时间内都可以捕获这样的事情。有人对此有解决方案吗?如果需要,我可以提供更多信息,如果可以的话,可以使用CSV阅读器或熊猫。谢谢!

1 个答案:

答案 0 :(得分:2)

CSV阅读器可以使用多余的换行符来处理您的csv。

data.csv

Name,John,Susan,
Date,"3
/14/
2019",3/14/2019
Job,Doctor,Cashier

代码

import csv
myDict = {}
with open("data.csv") as file:
    for line in csv.reader(file):
        myDict[line[0]] = line[1:]
print(myDict)
{'Name': ['John', 'Susan', ''], 'Date': ['3\n/14/\n2019', '3/14/2019'], 'Job': ['Doctor', 'Cashier']}

但是,这并没有解决这样一个事实,您在字典中会以空字符串作为第三个名字结尾,因为原始的csv具有该结尾​​的逗号。我通过添加以下if语句来解决此问题。

import csv
myDict = {}
with open("members.txt") as file:
    for line in csv.reader(file):
        if line[-1] == "":
            myDict[line[0]] = line[1:-1]
        else:
            myDict[line[0]] = line[1:]
print(myDict)
{'Name': ['John', 'Susan'], 'Date': ['3\n/14/\n2019', '3/14/2019'], 'Job': ['Doctor', 'Cashier']}