如何使Python程序读取文件中的行

如何使Python程序读取文件中的行,python,linux,dictionary,passwords,crypt,Python,Linux,Dictionary,Passwords,Crypt,我有两个文件,密码和字典。passwd是一个包含一个单词的测试文件,而字典有一个包含几行单词的列表。到目前为止,我的程序只读取和比较字典文件的第一行。例如我的字典文件包含(鸡蛋、鱼、红色、蓝色)。我的passwd文件只包含(egg) 程序运行得很好,但是一旦我将字典文件中的单词egg切换到列表中的last,程序就不会读取它,也不会调出结果 我的代码如下 #!/usr/bin/passwd import crypt def testPass(line): e = crypt.cryp

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

程序运行得很好,但是一旦我将字典文件中的单词egg切换到列表中的last,程序就不会读取它,也不会调出结果

我的代码如下

#!/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()

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

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

如果您这样做

for line in file_obj:
  ....
您隐式地使用了文件的方法,每次调用都会推进文件指针。这意味着在第一次完成内部循环后,将不再执行它,因为没有更多的行可读取

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

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

那是#/usr/bin/passwd shebang INTERNATIONAL?向右看,你会看到一个“相关问题”部分。这些问题已经有了你想要的答案。不,谢谢你指出,我以前没有注意到。你的想法奏效了!!!!非常简单的事情,比如在一行代码中添加.readlines()!