Python 如何对文件目录操作


Posted in Python onJuly 10, 2020

概述

I/O操作不仅包括屏幕输入输出,还包括文件的读取与写入,Python提供了很多必要的方法和功能,进行文件及文件夹的相关操作。本文主要通过两个简单的小例子,简述Python在文件夹及文件的应用,仅供学习分享使用,如有不足之处,还请指正。

涉及知识点

os模块:os 模块提供了非常丰富的方法用来处理文件和目录。
open方法:open方法用于打开一个文件,用于读取和写入。

实例1:获取指定目录下所有的文件大小,并找出最大文件及最小文件

分解步骤:

遍历文件夹下所有的子文件及子文件夹(需要递归),并计算每一个文件的大小
计算所有文件的大小总和
找出最大文件及最小文件

核心代码

定义一个方法get_file_size,获取单个文件的大小,单位有KB和MB两种。关键点如下所示:

  1. os.path.getsize 用于获取指定文件的大小,单位是Byte。
  2. round为四舍五入函数,保留指定位数的小数。
def get_file_size(file_path, KB=False, MB=False):
  """获取文件大小"""
  size = os.path.getsize(file_path)
  if KB:
    size = round(size / 1024, 2)
  elif MB:
    size = round(size / 1024 * 1024, 2)
  else:
    size = size
  return size

定义一个方法list_files,遍历指定文件目录,并存入字典当中。关键点如下所示:

  • os.path.isfile 用于判断给定的路径是文件还是文件夹。
  • os.listdir 用于获取指定目录下所有的文件及文件夹,返回一个列表,但是只是当前文件夹的名称,并不是全路径。
  • os.path.join 用于拼接两个路径
def list_files(root_dir):
  """遍历文件"""
  if os.path.isfile(root_dir): # 如果是文件
    size = get_file_size(root_dir, KB=True)
    file_dict[root_dir] = size
  else:
    # 如果是文件夹,则遍历
    for f in os.listdir(root_dir):
      # 拼接路径
      file_path = os.path.join(root_dir, f)
      if os.path.isfile(file_path):
        # 如果是一个文件
        size = get_file_size(file_path, KB=True)
        file_dict[file_path] = size
      else:
        list_files(file_path)

计算总大小和最大文件及最小文件,如下所示:

通过比较字典value的大小,返回对应的key的名称。关键点如下所示:

  1. max_file = max(file_dict, key=lambda x: file_dict[x])
  2. min_file = min(file_dict, key=lambda x: file_dict[x])
if __name__ == '__main__':
  list_files(root_dir)
  # print( len(file_dict))
  # 计算文件目录大小
  total_size = 0
  # 遍历字典的key
  for file in file_dict:
    total_size += file_dict[file]

  print('total size is : %.2f' % total_size)
  # 找最大最小文件
  max_file = max(file_dict, key=lambda x: file_dict[x])
  min_file = min(file_dict, key=lambda x: file_dict[x])
  print('max file is : ', max_file, '\n file size is :', file_dict[max_file])
  print('min file is : ', min_file, '\n file size is :', file_dict[min_file])

实例2:将两个文本文件中的内容进行合并,并保存到文件中

两个文件内容,如下图所示:

Python 如何对文件目录操作

分解步骤:

  1. 读取两个文件中的内容并进行解析出key和value,存入字典当中(两个字典,分别存储两个文件的内容)。
  2. 遍历第1个字典,并查找第2个字典当中相同key的值,如不存在,则只显示第1个内容,如存在,则进行合并。
  3. 遍历第2个字典,并查找不在第1个字典当中的key的值,进行累加。
  4. 将拼接后的列表存入文件当中。

核心代码

定义一个函数read_book,用于读取两个文件的内容。关键点如下所示:

  1. open函数用于打开一个文件,文件编码为UTF-8。
  2. readlines用于读取所有的行,并返回一个列表。
  3. split用于分割字符串为数组。
def read_book():
  """读取内容"""
  # 读取一个文件
  file1 = open('book1.txt', 'r', encoding='UTF-8')
  lines1 = file1.readlines()
  file1.close()
  for line in lines1:
    line = line.strip() # 去空白
    content = line.split(',')
    book1[content[0]] = content[1]

  # 另一种方式,读取另一个文件,不需要close,会自动关闭
  with open('book2.txt', 'r', encoding='UTF-8') as file2:
    lines2 = file2.readlines()
  for line in lines2:
    line = line.strip() # 去空白
    content = line.split(',')
    book2[content[0]] = content[1]

定义一个函数,用于合并内容,并保存。关键点如下所示:

  1. append 用于为数组添加新元素。
  2. dict.keys函数 用于返回所有的key。
  3. join函数用于将数组转换成字符串,并以对应字符分割。
  4. writelines 用于写入所有的行到文件。
  5. with语法,当执行结束时,自动close,并释放资源。
def merge_book():
  """合并内容"""
  lines = [] # 定义一个空列表
  header = '姓名\t 电话\t 文本\n'
  lines.append(header)
  # 遍历第一个字典
  for key in book1:
    line = ''
    if key in book2.keys():
      line = line + '\t'.join([key, book1[key], book2[key]])
      line += '\n'
    else:
      line = line + '\t'.join([key, book1[key], ' *****'])
      line += '\n'
    lines.append(line)
  # 遍历第2个,将不包含在第1个里面的写入
  for key in book2:
    line = ''
    if key not in book1.keys():
      line = line + '\t'.join([key, ' *****', book2[key]])
      line += '\n'
      lines.append(line)
  # 写入book3
  with open('book3.txt', 'w', encoding='UTF-8') as f:
    f.writelines(lines)

整体调用,如下所示:

if __name__ == '__main__':
  # 读取内容
  read_book()
  # 合并内容
  merge_book()

  # print(book1)
  # print(book2)

最后拼接后生成的文件,如下所示:

Python 如何对文件目录操作

通过以上两个例子,可以大致了解文件及目录操作的一些方法及步骤。

以上就是Python 如何对文件目录操作的详细内容,更多关于Python 文件目录操作的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
PyGame贪吃蛇的实现代码示例
Nov 21 Python
python利用插值法对折线进行平滑曲线处理
Dec 25 Python
Python3 使用cookiejar管理cookie的方法
Dec 28 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
Python二维码生成识别实例详解
Jul 16 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
Apr 26 Python
Python通过字典映射函数实现switch
Nov 06 Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 Python
python爬不同图片分别保存在不同文件夹中的实现
Apr 02 Python
浅谈Python 中的复数问题
May 19 Python
教你用python实现12306余票查询
Jun 30 Python
Python下划线5种含义代码实例解析
Jul 10 #Python
Python 没有main函数的原因
Jul 10 #Python
如何教少儿学习Python编程
Jul 10 #Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 #Python
django form和field具体方法和属性说明
Jul 09 #Python
浅谈Python里面None True False之间的区别
Jul 09 #Python
Django中Q查询及Q()对象 F查询及F()对象用法
Jul 09 #Python
You might like
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
一个用于网络的工具函数库
2006/10/09 PHP
PHP关联链接常用代码
2012/11/05 PHP
详解PHP版本兼容之openssl调用参数
2018/07/25 PHP
jquery统计复选框选中示例
2013/11/05 Javascript
js中定义一个变量并判断其是否为空的方法
2014/05/13 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
判断颜色是否合法的正则表达式(详解)
2017/05/03 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
vue 自动化路由实现代码
2019/09/03 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
详解JavaScript 异步编程
2020/07/13 Javascript
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
python的多重继承的理解
2017/08/06 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
安装docker-compose的两种最简方法
2019/07/30 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
python 下划线的不同用法
2020/10/24 Python
HTML5移动端手机网站开发流程
2016/04/25 HTML / CSS
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
htnl5利用svg页面高斯模糊的方法
2018/07/20 HTML / CSS
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
一文搞懂python异常处理、模块与包
2021/06/26 Python