我有以下代码来替换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()
答案 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()