Python:验证csv是否只有一列,否则抛出错误

时间:2018-07-25 17:05:07

标签: python email email-validation

我有一个包含电子邮件的CSV文件,我需要在其中验证是否有不止一列,如果有那么我需要拒绝该文件,我正在考虑阅读每一行并使用“输入”操作来检查如果第一行包含逗号,尽管在yahoo链接https://in.answers.yahoo.com/question/index?qid=20101211183849AAy3gVh中 我发现如果在双引号中,我们可以在电子邮件地址中添加逗号。

这里的逻辑应该是什么?

不能使用csv或pandas模块

文件的前3行:

dilkash.manghani@gmail.com, dilkash.manghani@gmail.com
dilkash123@gmail.com, dilkash123@gmail.com
dilkash423@gmail.com, dilkash523@gmail.com

代码:

with open("file.csv", "r") as f:
    data = f.read().split('\n')
    for email in data:
        if "," in email:
            raise Exception("invalid")

2 个答案:

答案 0 :(得分:0)

使用熊猫,如下所示加载到数据框中

import pandas 

df = pandas.read_csv(file_path)
if (len(df.columns) >2):
    raise Exception
else:
    print("Valid")

编辑:由于不能使用熊猫或csv,因此可以执行以下操作

with open(file) as f:
    for each in f:
        if len(f.split(',"')) > 2:
            raise Exception
    print("Valid CSV")

注意:我使用,"作为分隔符。为什么?,因为,如果可以在列中包含逗号,那么它应该被双引号引起来。并且由于它是csv,因此每一列都必须用逗号分隔。因此,至少会有一个,"

答案 1 :(得分:-1)

>>> import csv
>>> with open('eggs.csv', 'rb') as csvfile:
...     spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
...     for row in spamreader:
...         assert(len(row) == 1)
...         print ', '.join(row)

会做。