-4

我试图在我正在编写的脚本中多次使用相同的定义。我可以让 def 工作一次,但不能第二次工作,任何帮助都会很棒。

def def_test(name):
     COUNT = 0
     Totals = {}
     for line in file_1:
         if COUNT == 0:
             COUNT +=1
             continue
         else:
              quantity = float(line[12])
              persons_name = line[14].strip(" ")
              if persons_name == name:
                     print(name)

if __name__ =="__main__":
     def_test("Adam")
     def_test("Bob")

我如何让它在第二遍寻找“鲍勃”?

4

2 回答 2

4

由于问题中没有足够的信息(在我写这篇文章的时候......),我猜你是在代码中的其他地方打开文件,并且file_1是对该打开文件的引用。当您迭代它时,您正在读取文件的末尾。您将需要重置file_1以指向文件的开头。从概念上讲,最简单的方法是关闭它并重新打开它。

除非有明确的理由在代码的其他部分打开文件,否则遍历文件行的惯用方法是使用with语句,该语句打开文件,运行代码,然后再次自动关闭它。

例如:

with open("the_file.txt", "r") as file_1:
    for line in file_1:
        ...

打开文件是一件相对低效的事情,尽管对于像你这样的简单程序来说,开销可以忽略不计。如果您每秒打开此文件数百次或更多次,则只打开一次是有意义的。在这种情况下,您将使用调用的命令seek将内部指针移回文件的开头。我建议您对使用感到满意,并且仅在确定确实存在性能问题with时才开始考虑打开文件并使用。seek

于 2013-07-29T19:25:39.473 回答
2

你可以试试这个:

def def_test(name):
     COUNT = 0
     Totals = {}
     with open('file', 'r') as file_1: #open file each time you call function
         for line in file_1:
             if COUNT == 0:
                 COUNT +=1
                 continue
             else:
                 quantity = float(line[12])
                 persons_name = line[14].strip(" ")
                 if persons_name == name:
                     print(name)
于 2013-07-29T19:28:36.480 回答