如何验证CSV文件是否由特定字符分隔(在本例中是反勾号(`))

2024-04-24 04:18:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这些巨大的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)

不知道如何验证每个值是否由反勾分隔,否则抛出错误。这些桌子很大(这对电力来说不是问题)


Tags: 文件csv方法inself内容forreader
3条回答

如果您不知道一个文件中有多少列,可以检查以确保所有行都具有相同的列数-如果您希望头(第一个)始终正确,请使用它来确定列数。在

for csvfile in self.fullcsvpathfiles:
    with open(self.fullcsvpathfiles[0], mode='r') as csv_file:
        csv_reader = csv.DictReader(csv_file, delimiter = "`")
        ncols = len(next(csv_reader))
        if not all(len(row)==ncols for row in reader):
            #do something

for csvfile in self.fullcsvpathfiles:
    with open(self.fullcsvpathfiles[0], mode='r') as f:
        row = next(f)
        ncols = row.count('`')
        if not all(row.count('`')==ncols for row in f):
            #do something

如果你知道一个文件中有多少列。。。在

^{pr2}$

如果知道预期元素的数量,就可以检查每一行

f=open(filename,'r')
for line in f:
    line=line.split("`")
    if line!=numElements:
        raise Exception("Bad file")

如果知道意外插入的分隔符,也可以尝试恢复,而不是引发异常。也许是这样的:

^{pr2}$

当然,一旦您已经深入到了读取文件的程度,就没有必要使用外部库来读取数据了。继续用吧。在

方法1

你可以用熊猫图书馆熊猫.read_csv()函数读取sep='`'的csv文件(它指定分隔符)。如果它将文件解析为一个形状良好的数据帧,那么您几乎可以确定这是好的。在

另外,为了自动化验证过程,您可以检查dataframe中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

有关的详细信息,请参阅this page熊猫.read_csv(). 在

方法2

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

^{pr2}$

相关问题 更多 >