嵌套for循环,范围由文件定义

时间:2019-08-04 23:13:02

标签: python python-3.x

我正在尝试编写一个嵌套的for循环,其中范围是由两个输入文件定义的,文件的内容与此问题并不真正相关。文件作为参数传递给程序。

对于文件A的每一行(例如包含数字),for循环应遍历文件B中的每一行(例如包含字母)。

因此,预期结果为1abc2abc3abc作为输出。

我当前的问题是我不太了解打开文件的位置如何影响循环。

此外,我不确定首先打开文件,然后将两个文件的内容逐行写入列表是否会更有益,以避免关闭任何文件干扰程序。

我改变了打开文件时的位置,这实际上导致程序按预期运行。尽管如我最初所说,我不确定这是否正确。

import sys

numbers = open(sys.argv[1], "r")
#letters = open(sys.argv[2], "r")

for line_num in numbers:

    print(line_num, end="")
    letters = open(sys.argv[2], "r")

    for line_let in letters:
        print(line_let, end="")

所代表的代码当前有效-我现在在第一个for循环中打开包含字母的文件。如果我改为将其从for循环中删除并取消注释,因此在循环之前打开文件,我将得到一个迭代,即1abc23而不是1abc 2abc 3abc,

2 个答案:

答案 0 :(得分:0)

通常,打开文件并从文件中读取流时,您需要进行一次while循环,直到到达文件末尾。如果文件作为参数传入,我不确定会有一个循环读取第一个文件,那么内部循环读取第二个文件就有意义。如果需要合并数据,则分别读取它们可能更有意义,然后合并它们。您得到“ 1abc23”而不是“ 1abc2abc3abc”的唯一原因是因为在字母文件“ abc”中一行一行,因为它逐行读取。因此,如果您想要“ 1abc2abc3abc”,那么就像我之前说的,我建议读出字母并将其存储到变量中,然后遍历数字并在每个循环的末尾附加字母。

答案 1 :(得分:-1)

代码的主要问题是,您打开文件后再也不要关闭它,这是一种不良做法,并可能导致进一步的错误。您应该使用with open方法。您应该按照您说的做,将文件中的信息存储在列表或字典中,然后进行解析。

相关问题