如何在文件中创建Python程序读取行

时间:2015-01-24 22:22:54

标签: python linux dictionary passwords crypt

我有2个文件,passwd和字典。 passwd是一个包含一个单词的测试文件,而词典则包含几行单词的列表。到目前为止,我的程序只读取和比较字典文件的第一行。例如。我的字典文件包含(鸡蛋,鱼,红,蓝)。我的passwd文件只包含(egg)。

程序运行得很好,但是一旦我在字典文件中将单词egg切换到列表中的最后一个,程序就不会读取它而不会提取结果。

我的代码如下。

#!/usr/bin/passwd

import crypt

def testPass(line):
    e =  crypt.crypt(line,"HX")
    print e

def main():
    dictionary = open('dictionary', 'r')
    password = open('passwd', 'r')
    for line in dictionary:
        for line2 in password:
            if line == line2:
                testPass(line2)
    dictionary.close()
    password.close()

main()

2 个答案:

答案 0 :(得分:1)

如果你这样做

for line in file_obj:
  ....

您隐式使用文件的readline方法,在每次调用时推进文件指针。这意味着在第一次完成内部循环后,它将不再执行,因为没有更多的行可供读取。

一种可能的解决方案是使用readlines将一个(最好是较小的)文件保留在内存中。这样,您可以为从另一个文件中读取的每一行迭代它。

file_as_list = file_obj.readlines()
for line in file_obj_2:
  for line in file_as_list:
    ..

答案 1 :(得分:0)

一旦内部循环运行一次,它将到达密码文件的末尾。当外循环到达第二次迭代时,密码文件中没有任何内容可读,因为您没有将文件指针移回文件的开头。

这个问题有很多解决方案。您可以使用seek将文件指针移回开头。或者,您可以读取整个密码文件一次,并将数据保存在列表中。或者,您可以在外循环的每次迭代中重新打开该文件。选择哪个最好取决于数据的性质(有多少行,它们是慢速网络共享还是快速本地磁盘?)以及您的性能要求。