首页 > 解决方案 > 我将如何验证 CSV 文件是否由某个字符分隔(在本例中为反引号 ( ` ) )

问题描述

我有这些巨大的 CSV 文件需要验证;需要确保它们都用反引号`分隔。我有一个阅读器打开每个文件并打印它的内容。只是想知道你们所有人将采用不同的方式来验证每个值是否由反勾号字符分隔

for csvfile in self.fullcsvpathfiles:
                   #print("file..")
            with open(self.fullcsvpathfiles[0], mode='r') as csv_file:
                    csv_reader = csv.DictReader(csv_file, delimiter = "`")
                    for row in csv_reader:
                            print (row)

不确定如何验证每个值是否由反引号分隔,否则会抛出错误。这些桌子很大(这不是电力问题;))

标签: python

解决方案


方法一

使用 pandas 库,您可以使用 pandas.read_csv() 函数读取带有 sep='`' 的 csv 文件(它指定分隔符)。如果它将文件解析为形状良好的数据框,那么您几乎可以肯定这很好。

此外,为了自动化验证过程,您可以检查数据框中的 NaN 值的数量是否在可接受的范围内。假设您的 csv 文件没有很多空白(因此只需要几个 NaN 值),您可以将 NaN 值的数量与您设置的阈值进行比较。

import pandas as pd
nan_threshold = 20
for csvfile in self.fullcsvpathfiles:
    my_df = pd.read_csv(csvfile, sep="`")    # if it fails at this step, then something (probably the delimiter) must be wrong
    nans = my_df.is_null().sum()
    if nans > nan_threshold:
        print(csvfile)  # make some warning here

有关 pandas.read_csv() 的更多信息,请参阅此页面

方法二

如评论中所述,您还可以检查文件每一行中分隔符的出现次数是否相等。

num_of_sep = -1  # initial value
# assume you are at the step of reading a file f
for line in f:
    num = line.count("`")
    if num_of_sep == -1:
        num_of_sep = num
    elif num != num_of_sep:
        print('Some warning here')

推荐阅读