Python循环写入多文件内容时覆盖前置内容的问题
解决循环写入文件被覆盖的问题
嘿,我一眼就看出问题所在啦!你每次循环里打开输出文件的时候,大概率用的是默认的'w'写入模式——这个模式会在每次打开文件时清空之前的所有内容,所以循环跑完后,自然就只剩最后一次写入的数据了。下面给你两种靠谱的解决办法:
方法一:把输出文件的打开操作放在循环外面
这种方式最推荐,因为只打开一次文件,既高效又能避免重复清空的问题:
#!/usr/bin/env python3 import glob import xml.etree.ElementTree as ET # 用原始字符串处理Windows路径,避免转义问题 filenames = glob.glob(r"C:\Users\####\Desktop\BNC2\[A00-A0B]*.xml") # 把输出文件的打开放在循环外,用'w'模式(只清空一次) with open(r"C:\Users\####\Desktop\output.txt", 'w', encoding="utf-8") as outF: for filename in filenames: with open(filename, 'r', encoding="utf-8") as content: tree = ET.parse(content) root = tree.getroot() # 这里写你提取数据并写入的逻辑,比如: # outF.write(your_data + '\n')
方法二:用追加模式打开文件
如果因为某些原因必须在循环里打开输出文件,记得用'a'追加模式,这样每次写入都会加到文件末尾,不会清空之前的内容:
#!/usr/bin/env python3 import glob import xml.etree.ElementTree as ET filenames = glob.glob(r"C:\Users\####\Desktop\BNC2\[A00-A0B]*.xml") for filename in filenames: with open(filename, 'r', encoding="utf-8") as content: tree = ET.parse(content) root = tree.getroot() # 用'a'模式打开,追加写入 with open(r"C:\Users\####\Desktop\output.txt", 'a', encoding="utf-8") as outF: # 写入你的数据 # outF.write(your_data + '\n')
另外提醒一下:Windows路径里的反斜杠最好用原始字符串(在路径前加r),不然像\U、\B这类字符会被当成转义字符,容易报错哦。
内容的提问来源于stack exchange,提问作者pglove
相关产品推荐
相关产品推荐

