【问题标题】:Python: validate if csv has only one column else throw errorPython:验证csv是否只有一列,否则抛出错误
【发布时间】:2019-01-02 14:10:56
【问题描述】:

我有一个包含电子邮件的 CSV 文件,我需要验证其中是否有多个列,如果有则我需要拒绝该文件,我正在考虑读取每一行并使用“in”操作来检查如果第一行包含逗号,虽然在其中一个雅虎链接 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")

【问题讨论】:

  • 到目前为止你尝试过什么?请发布您的代码
  • 我阅读了文件,解析了每一行并验证了任何一行中是否有逗号,但不知道为什么它被否决了,有人知道答案吗
  • 向我们展示您的输入文件的外观,并展示您到目前为止所做的尝试
  • 添加文件的前几行
  • @dilkash,它不能是一个有效的csv,如果它在一列中包含逗号,那么它应该用双引号括起来

标签: python email email-validation


【解决方案1】:

使用 pandas,加载到如下数据框

import pandas 

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

编辑:由于您不能使用 pandas 或 csv,您可以执行以下操作

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

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

【讨论】:

  • 不能使用熊猫
【解决方案2】:
>>> 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)

会做的。

【讨论】:

  • 为什么要将引号字符改为竖线,将分隔符改为空格?
  • 这只是一个例子,你必须使用适合你的csv的值
  • 不能使用 csv 模块
猜你喜欢
  • 2016-05-01
  • 1970-01-01
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多