嵌套在python中的for循环无法完全迭代

时间:2018-10-18 13:31:55

标签: python-3.x

我有以下代码来替换150行数据的第26行中的一组值。问题在于嵌套的for循环。从第二次迭代开始,不会执行内部循环。相反,循环跳到最后一行

n= int(input("Enter the Number of values: "))
arr = []
print ('Enter the Fz values (in Newton): ')
for _ in range(n):
    x=(input())
    arr.append(x)
print ('Array: ', arr)

os.chdir ("D:\Work\python")
f = open("datanew.INP", "r+")
f1 = open("data.INP", "w+")

for i in range(len(arr)):
    str2 = arr[i]
    for j,line in enumerate(f):
        if j == 25 :
            new = line.split()
            linenew = line.replace(new[1],str2)
            print (linenew)
            f1.write(linenew)
        else:
            f1.write(line)
    print(arr[i], 'is replaced')
f.close()
f1.close()

1 个答案:

答案 0 :(得分:3)

问题是您的代码正在文件中循环。第一次通过时,到达文件末尾。此后,文件中没有要读取的数据,因此下一个循环没有任何要迭代的地方。

相反,您可以尝试读取整个文件并将数据存储在列表中,然后遍历该列表。 (或者,您可以消除循环并直接访问第26个项目。)

以下是一些简单的代码,可从一个文件读取,替换第26行并写入另一个文件:

f = open("data.INP", "r")       # Note that for simple reading you don't need the '+' added to the 'r'
the_data = f.readlines()
f.close()
the_data[25] = 'new data\n'     # Remember that Python uses 0 indexing, thus the 25

f1 = open("updated_data.out", "w")  # Assuming you want to write a new file, leave off the '+' here, as that indicates that you want to append to an existing file
for l in the_data:
    f1.write(l)
f1.close()