Python脚本读取文件夹文件名写入TXT仅存单个文件名问题求助
问题解决:Python脚本仅写入单个文件名到TXT文件
问题原因
你的脚本在循环内每次用'w'模式打开文件,该模式会清空文件原有内容并重新写入,所以循环结束后,TXT文件里只会保留最后一次写入的文件名;而print能正常输出所有文件名,是因为打印操作不存在内容覆盖的问题。
修复方案
方案1:推荐——一次性打开文件,循环写入(高效)
把文件操作放在循环外部,用with语句自动管理文件关闭,避免手动遗漏close()操作:
import os path = 'C:/Users/XXX' files = os.listdir(path) # 用with语句打开文件,循环内持续写入内容 with open("write_demo.txt", 'w') as fp: for f in files: print(f) zip_file_name = os.path.basename(f).split(".")[0] print(zip_file_name) fp.write(zip_file_name + "\n") print('Done Writing')
方案2:追加模式打开文件(不推荐,效率较低)
如果一定要在循环内操作文件,改用'a'追加模式,该模式会在文件末尾添加内容而不覆盖原有内容:
import os path = 'C:/Users/XXX' files = os.listdir(path) for f in files: print(f) zip_file_name = os.path.basename(f).split(".")[0] print(zip_file_name) # 用追加模式打开文件 with open("write_demo.txt", 'a') as fp: fp.write(zip_file_name + "\n") print('Done Writing')
额外优化:仅处理文件(可选)
如果你的目标是只读取文件夹内的文件而非子文件夹,可以添加文件判断逻辑:
import os path = 'C:/Users/XXX' files = os.listdir(path) with open("write_demo.txt", 'w') as fp: for f in files: file_full_path = os.path.join(path, f) # 判断当前条目是否为文件 if os.path.isfile(file_full_path): print(f) zip_file_name = os.path.basename(f).split(".")[0] print(zip_file_name) fp.write(zip_file_name + "\n") print('Done Writing')
内容的提问来源于stack exchange,提问作者Tushar Singh
相关产品推荐
相关产品推荐

