如何检查CSV文件的内容是否遵循Python中的特定格式?

时间:2018-04-02 07:52:32

标签: python csv assert

我正在创建一个python程序,它将CSV文件作为输入(文件的位置作为命令行),在进行任何预处理之前,如果文件的内容是特定格式,则断言,如果没有,则引发用户说明选择正确的文件的例外。

内容应该是这样的:

Sr.no .  Codes .  v1 .     v2 .     v3 .     v4 .   ... v300
1 .      code1 .  val1 .   val2 .   val3 .   NA .   ... NA
2 .      code2 .  val4 .   NA .     NA .     NA .   ... NA
3 .      code3 .  val5 .   val6 .   NA .     NA .   ... NA
4 .      code4 .  val7 .   val8 .   val9 .   NA .   ... NA
.
.

基本上它应该是一个CSV文件,前两列是SrNo。和代码和接下来的300列作为一些值,然后是'NA',最多300。

如果用户上传了类似的内容

Sr.no .  Codes .  v1 .     v2 .      v3 .    . . . . . v300
1 .      code1 .  NA .     val1 .    NA .    . . . . . NA 
2 .      code2 .  val2 .   val3 .    NA .    . . . . . NA

尽管在第v1列中有NA,但它应该引发一个与Srno = 1一致的异常,在第v2列中有一个值。

想知道,如何使用Python来确定文件的内容是否采用这种格式(示例代码片段会很有帮助)。另外,我可以从中学习如何断言文件内容内容,不仅仅是这种格式,还包括通用格式。

目前,我已达到此处,需要完成assert_format函数

import sys
import csv

def assert_format(file_name):

    csv_file = open(file_name)
    reader = csv.reader(csv_file)

    #code to check format

    return True

file_name = sys.argv[1]

if assert_format(file_name):
    print("format is correct")
else:
    print("choose correct file")

提前致谢!

1 个答案:

答案 0 :(得分:1)

看看这是否符合您的要求:

import sys
import csv
def assert_format(file_name):
    with open(file_name, 'rb') as csvfile:
        reader = csv.reader(csvfile, delimiter='.')
        for row in reader:
            flag=False
            for cell in row:
                if(cell == 'NA' and not flag):
                        flag=True
                elif(cell == 'NA' and flag):
                        return False
    return True

file_name = sys.argv[1]

if assert_format(file_name):
    print("format is correct")
else:
    print("choose correct file")