如何获取for循环之外的变量在循环内写入文件

img


我想在for i in fr 这个循环里调用之前储存的trueline列表然后修改 然后提取所有修改后的元素写成一个str写入fw 但这里好像没法正确写入修改后的列表

def test():
    while True:
        with open('patient.txt', 'r') as fr:
            print('do you want to change your file?(y/n)')
            a = input('please key in')
            if a:
                k = input('please key in your ID number')
                r_k = int(k) - 1
                for no,line in enumerate(fr):
                    if no == r_k:
                        print(line)  # confirm line
                        trueline = line.strip('\n').split(',')  # split for locating
                        print(trueline)
                        print('what do you want to change?')
                        print('1.age,2.gender,3.vaccine type.')
                        print('4.name,5.height,6.weight')
                        print('7.address,8.vaccination status')
                        print('9.blood type,10.medical history')
                        selection = input('please select one by number')
                        if selection.isdigit():
                            print('you are going to change:', trueline[int(selection)])
                            after = input('it will change to:', )
                            trueline[int(selection)] = after
                            with open('patientupdated.txt','w') as fw:
                                num = 0 #set count
                                for i in fr:
                                    num += 1 # if not then count = count + 1
                                    if num == k:
                                        print(trueline)
                                        save = ",".join(map(str, trueline)) + '\n'
                                        print('save is ',save)
                                        i = save
                                    fw.write(i)
                                    print(trueline)
                            continue

                        else:
                            print('error!!')
                            return

with open打开文件后,fr是个迭代器,也就是说外层的for no,line in enumerate(fr)遍历后的元素,在内层for i in fr里将不再存在。
所以一般是先把fr读入一个列表,然后再调用该列表,而不是直接遍历fr。