Python 把多个文本文件合并成一个文件 (头歌 实验五 Python文件 第2关:合并多个文本文件)
头歌上一道题,预期输出:
['秦时明月汉时关,万里长征人未还。\n', '但使龙城飞将在,不教胡马度阴山。\n', '空山不见人,但闻人语响。\n', '返景入深林,复照青苔上。\n']
做的我头都大了,因为不知道题目那里有没有提供保存诗句的txt,我就自己创建了相应txt来合成
我的答案:
import os
import os.pathdef MergeTxt(filepath, outfile): # 前一个是文本所在文件夹,后一个是输出文件夹os.chdir(filepath)file = open('t1.txt','w',encoding="utf8")file.write("秦时明月汉时关,万里长征人未还。\n")file = open('t2.txt', 'w', encoding="utf8")file.write("但使龙城飞将在,不教胡马度阴山。\n")file = open('t3.txt', 'w', encoding="utf8")file.write("春眠不觉晓,处处闻啼鸟。\n")file = open('t4.txt', 'w', encoding="utf8")file.write("夜来风雨声,花落知多少。\n")file = open('t5.txt', 'w', encoding="utf8")file.write("空山不见人,但闻人语响。\n")file = open('t6.txt', 'w', encoding="utf8")file.write("返景入深林,复照青苔上。\n")file = open('t7.txt', 'w', encoding="utf8")file.write("空山不见人,但闻人语响。\n")file = open('t8.txt', 'w', encoding="utf8")file.write("返景入深林,复照青苔上。\n")outfile = open(outfile, 'a', encoding="utf8") #此处name用文件名也能打开outfile.seek(0) # 回到文件开始outfile.truncate() # 清空文件for root, dirs, files in os.walk(filepath):for fi in files:a = open(fi, 'r', encoding="utf8") #合并txtoutfile.write(a.read())outfile.close()def main():filepath = input()outfile = input()MergeTxt(filepath, outfile)a = open(outfile, 'r', encoding="utf8")print(a.readlines())a.close()main()
做题过程中没有考虑close文件的问题。 学习到的新知识有:
1) 用 truncate函数 清空文件内容的时候,要先用seek函数回到文件开始的地方。
2) open函数 可以用文件名也可以用文件绝对地址。 可以利用 open函数 和 ‘w’ 来创建文件,不过问题是如果文件存在就会被覆盖掉,这里我正好需要这个性质。 如果是open函数 和 ‘r’ 一个不存在的文件,就会报错
file = open('t1.txt','r',encoding="utf8")# file.write("秦时明月汉时关,万里长征人未还。\n")##结果FileNotFoundError: [Errno 2] No such file or directory: 't1.txt'
3) 创建文件时要先 chdir函数 到目标文件夹。
4) 打开outfile时使用文件名也可以,即使目标文件不在当前工作目录(这里我还不明白)
标准答案(题目是给了含文本的文件的):
import os
import os.pathdef MergeTxt(filepath,outfile):k = open(outfile, 'a+',encoding='utf-8')for parent, dirnames, filenames in os.walk(filepath):for filepath in filenames:txtPath = os.path.join(parent, filepath) #获得txt的路径f = open(txtPath,encoding='utf-8') #打开txtk.write(f.read()+"\n") k.close()def main():filepath=input() outfile=input() if os.path.exists(outfile): #这一句看不懂os.remove(outfile)MergeTxt(filepath,outfile)k = open(outfile, 'r', encoding='utf-8')ls=k.readlines()k.close()print(ls)
main()
需要学习的地方:
1) 使用walk函数后 用 os.path.join函数 合并文件夹路径和文件名
2) open函数 不写第二个参数,默认 ‘r’ 只读
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
