Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据python中的需求检查/验证现有文件_Python_File - Fatal编程技术网

如何根据python中的需求检查/验证现有文件

如何根据python中的需求检查/验证现有文件,python,file,Python,File,假设我有一个名为abc.txt的文件,内容包括名字、姓氏、年龄、性别 Jack, Hugman, 22, M Joe, Zareil, 32, M Ashely, Timberlake, 28, F 现在我的要求是,我只需要名字、姓氏和年龄。那么,如何用文件验证/检查我的需求呢。我将在类对象中使用这三个字段 class A: def __init__(self, fname, lname, age): self.fname = fname self.lname = lname

假设我有一个名为abc.txt的文件,内容包括名字、姓氏、年龄、性别

Jack, Hugman, 22, M
Joe, Zareil, 32, M
Ashely, Timberlake, 28, F
现在我的要求是,我只需要名字、姓氏和年龄。那么,如何用文件验证/检查我的需求呢。我将在类对象中使用这三个字段

class A:

def __init__(self, fname, lname, age):
    self.fname = fname
    self.lname = lname
    self.age = age

fp = open("abc","r")

for lines in fp:
    temp = lines.split(",")
    print temp

这就是我所做的。我应该如何检查/验证?

一种简单的方法是使用异常:基本上指定您对文件的期望,假设所有内容都在其中,则对其进行解析。如果断言触发,则某些内容已关闭

例如,您可以执行以下操作:

a = A(temp[0], temp[1], int(temp[2])

你可以这样分开

for lines in fp:
    temp = lines.split(",")[:-1]
    print temp

您可以忽略第四个字段

class A:
    def __init__(self, fname, lname, age):
        self.fname = fname
        self.lname = lname
        self.age = age

    def __str__(self):
        return "fname={}, lname={}, age={}".format(self.fname, self.lname, self.age)

with open("abc.txt") as f:
    for line in f:
        fname, lname, age = [g.strip() for g in line.split(",")[:-1]]
        a = A(fname, lname, age)
        print(a)
结果:

fname=Jack, lname=Hugman, age=22
fname=Joe, lname=Zareil, age=32
fname=Ashely, lname=Timberlake, age=28
如果您只想使用正好有三个字段的行,请执行以下操作:

with open("in.txt") as f:
    for line in f:
        fields = [g.strip() for g in line.split(",")]
        if len(fields) == 3:
            a = A(fields[0], fields[1], fields[2])
            print(a)

1.你需要检查什么?您在
temp
中有字段。2.对照什么验证什么?对照现有文件bc.txt验证我的需求中只需要三个字段。我的需求有三个字段,一个文件中有四个字段。我应该如何检查?您看过CSV解析器模块了吗?您可以使用
len()
检查列表中的元素数。您能更具描述性吗??我就在上面,这应该是有效的代码。它本身不做任何检查,但如果少于3个元素,您将命中索引器。如果第三个参数不能转换为int,则会出现ValueError。如果您愿意,您也可以手动捕获这些内容并显式处理它们。如果必须有四个字段,您可以添加
assert len(temp)==4
@GajGaj-dornhege意味着,一旦您进行了拆分,a=a(temp[0],temp[1],temp[2])@dornhege您应该删除“int(temp[2]),以表示”temp[2]“不是吗?我的要求是三个字段,一个文件中有四个字段。我应该如何检查呢?如果len(temp)<4:,您需要执行
;名称错误:名称“A”未定义
A
是在
A类
中定义的。