Python循环中字符串赋值异常:如何在循环外调用txt变量?
问题分析与解决
问题成因
你的第一段代码中,每次循环处理一行文本时,都用 txt = line 把变量 txt 的值替换成当前行的内容。等所有循环执行完毕,txt 里只会保留最后一个文件的最后一行处理结果——如果最后一行是空行或者没有内容,打印出来就会看起来像“无法输出”。而第二段代码在循环内打印,是因为每次处理完一行就立刻输出,还没被下一行覆盖,所以能看到预期结果。
解决方法
要在循环外获取所有处理后的内容,需要把每一行的处理结果追加到 txt 里,而不是直接替换。把 txt = line 改成 txt += line 即可。如果需要区分不同文件的内容,可以在每个文件处理完后添加分隔符(比如换行或分割线),按需选择。
修正后的代码
import re import os path = "/data/notebook_files/" Filelist = [] txt = '' for home, dirs, files in os.walk(path): for filename in files: Filelist.append(os.path.join(home, filename)) for file in Filelist: with open(file, "r+", encoding='utf-8', errors='ignore') as f: print(file) for line in f: old_str = re.findall(r'\d+', line) for i in range(0, len(old_str)): line = line.replace(old_str[i], "\n###### v" + old_str[i], 1) txt += line # 改为追加而不是替换 print(txt)
这样修改后,txt 会累积所有文件的所有处理行,循环结束后打印就能得到完整的结果。
内容的提问来源于stack exchange,提问作者HHHPPP
相关产品推荐
相关产品推荐

