在上周的课程中,我们学习了Python文件读写和数据格式化,但只涉及了单个文件的读写。那么对于多个文件的读写又该如何操作呢?下面我们分享一段代码,实现批量读取某文件夹下的txt文件,并合并内容到一个新文件里。
学习了第七章“python文件的写和数据格式化”之后,我们会经常与文件打交道,当然也免不了涉及到文件夹操作。对于这些操作,python可以使用 os 及 shutill 模块(都要先引入 import ),其中包含了很多操作文件和目录的函数。
01
预备知识
· os模块(operating system)用于访问操作系统功能,执行简单的文件夹及文件操作。使用help(os):
注意有些函数在os模块中,有的是在os.path模块中。
· shutil 模块提供了大量的文件的高级操作,特别针对文件拷贝和删除。主要功能为目录和文件操作以及压缩操作。由于代码中并未涉及,我们只简单介绍一下移动、复制和删除。
Ø 系统操作
os.name #指示正在使用的工作平台os.exit() #终止当前进程os.system(command) #运行shell命令
Ø 目录操作(增删改查等)
Ø 工作目录及创建文件夹操作
os.getcwd() # 获取当前工作目录, 返回指定目录下的所有文件和目录名os.listdir(path) # 返回指定目录下的所有文件和目录名os.mkdir(path,mode=511[S1],*,dir_fd=None) # 创建单个目录os.makedirs(name, mode=511, exist_ok=False) # 创建多级目录
Ø 判断路径或文件
os.path.isabs(path) # 判断是否是绝对路径os.path.exists(path) # 检验给出的路径是否真实存在os.path.isdir(path) # 检验给出的路径是否是一个目录os.path.isfile(path) # 检验给出的路径是否是一个文件os.path.islink(path) # 检验给出的路径是否是一个符号链接
Ø 获取路径名、文件名
os.path.dirname(path) # 获取路径名,返回路径名的目录组件os.path.basename(path) # 获取文件名,返回路径名的最后一个组件
Ø 分离路径名、文件名
os.path.split(path) # 分隔目录和文件名/文件夹名# (返回元组(head,tail),其中tail是最后一个斜杠后的所有内容。) os.path.splitdrive(path) # 分隔盘符(windows系统) os.path.splitext(path) # 分隔文件和扩展名
Ø 删除文件夹/文件
os.rmdir(path, *, dir_fd=None) # 删除目录 (只能删除空目录)os.removedirs(name) #删除多个目录,类似于rmdir()os.remove(path, *, dir_fd=None) # 删除单一文件shutil.rmtree(path,ignore_errors=False,onerror=None) # 递归删除目录树
Ø 重命名文件夹/文件
os. rename(oldfileName, newFilename) #重命名文件或目录
Ø 更改文件夹/文件
os.chdir(path) # 改变工作目录
Ø 复制、移动文件夹/文件
shutil.copyfile("oldfile","newfile") # 复制文件,oldfile和newfile都只能是文件shutil.copytree("olddir","newdir") #复制文件夹,olddir和newdir都只能是目录,且newdir必须不存在shutil.copy("old","new") # 复制文件/文件夹,old只能是文件夹,new可以是文件,也可以是目标目录shutil.move("old","new") # 移动文件/文件夹至 new文件夹中
Ø 其他的一些操作
os.stat(path, *, dir_fd=None, follow_symlinks=True)#在给定路径上执行stat系统调用os.chmod(path,mode,*,dir_fd=None,follow_symlinks=True)#更改文件的访问权限os.path.getsize(path) #获取文件大小
02
批量合并文件的代码实现!
Step1:批量读取某文件夹下的txt文件
import ospath = 'C:/Users/Samuel/Desktop/2020April/file'files= os.listdir(path) #获取文件夹下的所有文件和目录名txts = [] #建立一个空列表用于存放文件夹下txt文件的内容#判断文件夹下文件类型for file in files: fpath = path+'\\'+ file #构造绝对路径 ffile=os.path.splitext(fpath) #分离文件和扩展名 fname,ftype=ffile #对文件夹下的txt文件进行操作 if ftype == '.txt': with open(fpath,'r',encoding='gbk') as f: data=f.read() txts.append(data)
Step2:合并内容到一个新文件里
with open('C:/Users/Samuel/Desktop/2020April/txt_new.txt','w+') as txt_new: txt_new.writelines(txts) #将txt文件内容合并得到的列表写入新文件
03
当当当当!检验成果的时候到了!
查看一下file文件夹中的内容:
txt_new文件内容:
这样我们就实现了 批量读取某文件夹下的txt文件,并合并内容到一个新文件里。
后记:上述代码通过批量读取文件夹下所有txt文件内容,保存至列表变量txts,之后再一次性写入新txt文件,实现了批量txt文件的合并。但如果文件夹下文件多、内容多时,采用边读取边追加至新文件的方式,可能会更省存储空间。感兴趣的同学可以尝试。
·END·