Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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 - Fatal编程技术网

Python:一直读到第一行格式正确的代码,如果没有,则捕获

Python:一直读到第一行格式正确的代码,如果没有,则捕获,python,Python,我试图从一个文件中读取第一行,它对应于我指定的某种格式 我有一个方法self.parse\u log\u line(line),它在正确解析文件时返回一个对象,否则返回None 所以我试着去读和解析每一行,直到我得到一些非零的东西: with open(filename, 'r') as csv_file: line = csv_file.readline() info = self.parse_log_line(line) #parse it, None if the line

我试图从一个文件中读取第一行,它对应于我指定的某种格式

我有一个方法
self.parse\u log\u line(line)
,它在正确解析文件时返回一个对象,否则返回
None

所以我试着去读和解析每一行,直到我得到一些非零的东西:

with open(filename, 'r') as csv_file:
    line = csv_file.readline()
    info = self.parse_log_line(line) #parse it, None if the line isn't formatted properly
    while info is None:
        line = csv_file.readline()
        info = self.parse_log_line(line)
    # if info is still none, do something to handle that
然而,出于某种原因,这种循环是无限的。某些文件可能为空,或不包含格式正确的行


我怎样才能解决这个问题?阅读,直到我得到一个格式正确的行,如果没有,请执行其他操作?

您还需要检查是否有一行要阅读(如果没有更多的要阅读,并且您仍在阅读-无限循环,该怎么办)


您还需要检查是否有一行要读(如果没有更多的内容要读,而您的仍在读-无限循环会怎么样)


在这里,更好、更安全的方法是遍历文件,直到找到要查找的内容。例如,类似于:

with open('your_file') as f:
    for line in f:
        # do your logic here

# check for your `None` match here
用完文件后,发现
None
,继续执行
None
匹配条件


以这种方式使用while循环是非常危险的,因为它可能会像您当前所经历的那样在无限循环中进行。

一种更好、更安全的方法是遍历您的文件,直到找到您要查找的内容。例如,类似于:

with open('your_file') as f:
    for line in f:
        # do your logic here

# check for your `None` match here
用完文件后,发现
None
,继续执行
None
匹配条件


以这种方式使用while循环是非常危险的,因为它可能会像您当前所经历的那样在无限循环中进行。

为什么不迭代文件,直到找到您要查找的内容。一旦您耗尽了该文件,并且该文件为“无”,是否继续执行该条件?以这种方式使用while循环是非常危险的,因为它将冒着无限循环的风险,就像你目前所经历的那样。嗯,是的,我为什么不呢?我现在正在尝试:杜克,艾德杰夫,这很有效。我现在对csv_文件中的行使用
,并在其中进行解析。然后,只要找到第一行合适的代码,就可以简单地
break
。如果你加上这个作为回答,我可以接受;)很高兴听到你让它工作了。我发布了答案。你为什么不反复浏览你的文件,直到找到你要找的东西。一旦您耗尽了该文件,并且该文件为“无”,是否继续执行该条件?以这种方式使用while循环是非常危险的,因为它将冒着无限循环的风险,就像你目前所经历的那样。嗯,是的,我为什么不呢?我现在正在尝试:杜克,艾德杰夫,这很有效。我现在对csv_文件中的行使用
,并在其中进行解析。然后,只要找到第一行合适的代码,就可以简单地
break
。如果你加上这个作为回答,我可以接受;)很高兴听到你让它工作了。我发布了答案。我在想同样的事情,然后向下滚动看到:)我在想同样的事情,然后向下滚动看到:)看看while循环中的逻辑。这是不对的。if语句毫无意义,因为它测试的条件与while循环相同。因此if语句将运行一次,如果在第一行中没有找到要查找的内容,则终止。No@Jonathan,while循环正在测试
info
是否为None<如果分析
失败,即使
不同(可能行的格式不正确),代码>信息也可能为无。同样,while循环检查信息,if检查行。看看while循环中的逻辑。这是不对的。if语句毫无意义,因为它测试的条件与while循环相同。因此if语句将运行一次,如果在第一行中没有找到要查找的内容,则终止。No@Jonathan,while循环正在测试
info
是否为None<如果分析
失败,即使
不同(可能行的格式不正确),代码>信息也可能为无。同样,while循环检查信息,if检查行。