在上周的课程中,我们学习了Python文件读写和数据格式化,但只涉及了单个文件的读写。那么对于多个文件的读写又该如何操作呢?下面我们分享一段代码,实现批量读取某文件夹下的txt文件,并合并内容到一个新文件里。

学习了第七章“python文件的写和数据格式化”之后,我们会经常与文件打交道,当然也免不了涉及到文件夹操作。对于这些操作,python可以使用 os 及 shutill 模块(都要先引入 import ),其中包含了很多操作文件和目录的函数。

01

预备知识

·   os模块(operating system)用于访问操作系统功能,执行简单的文件夹及文件操作。使用help(os):



Python中文件与目录操作 python文件与文件夹操作_chmod 文件夹及子文件夹

注意有些函数在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文件夹中的内容:



Python中文件与目录操作 python文件与文件夹操作_c++ 合并2个txt_02

Python中文件与目录操作 python文件与文件夹操作_Python中文件与目录操作_03

txt_new文件内容:



Python中文件与目录操作 python文件与文件夹操作_Python中文件与目录操作_04

这样我们就实现了 批量读取某文件夹下的txt文件,并合并内容到一个新文件里。

后记:上述代码通过批量读取文件夹下所有txt文件内容,保存至列表变量txts,之后再一次性写入新txt文件,实现了批量txt文件的合并。但如果文件夹下文件多、内容多时,采用边读取边追加至新文件的方式,可能会更省存储空间。感兴趣的同学可以尝试。


·END·