读写文件比较简单,有一点特别注意就好了

windows下Python默认打开的文件以gbk解码,而一般我们的文件是utf-8编码的,所以如果文本含有中文,就会出现异常或者乱码。此时手动添加encoding='utf-8'表示以utf-8的方式打开。

当然Python写入时候,也是默认以gbk的编码写入。而文件通常是utf-8格式保存的,所以若不指定写入的编码方式,一写入中文就是乱码了

with open('abc.txt', encoding='utf-8') as f:print(f.read())  # 这样打开文件有中文也不怕# 当然Python写入时候,默认以gbk的编码写入。而文件是utf-8格式保存的,所以不指定写入的编码方式,一写入中文就是乱码了with open('abc.txt', 'w', encoding='utf-8') as f:f.write('你好')

好了进入正题

os模块

当前工作目录

下面的代码可获取/切换当前工作目录,也就是.代表的路径

import osprint(os.getcwd())  # F:\PythonProject
os.chdir(r'D:\python')
print(os.getcwd())  # D:\python
print(os.path.abspath('.'))  # D:\python# 由于工作目录切换到D:\python,所以这个aa.txt就在其下生成
with open('aa.txt', 'w', encoding='utf-8') as f:f.write('你好')

os.chdir可以切换当前的工作目录,也就是改变了.所指向的目录。于是相对路径aa.txt就在切换后的路径下生成。这两个路径表达同一个意思

  • aa.txt
  • .\aa.txt

还有两个点,表示当前目录的父目录。..\aa.txt这样就是D:\aa.txt的意思了。

绝对路径和相对路径

  • 绝对路径指的是从根文件夹子(盘符)开始
  • 相对路径是相对于当前工作目录
print(os.path.abspath('aa.txt'))  # D:\python\aa.txt
print(os.path.isabs('aa.txt'))  # False
print(os.path.isabs('.'))  #False

上面的代码,第一个函数返回参数路径的绝对路径,第二个函数用于检查一个路径是否是相对路径。

获取最后一个斜杠前后的路径。

# 获取最后一个斜杠后面的部分
print(os.path.basename(r'D:\python\aa.txt')) # aa.txt
print(os.path.dirname(r'D:\python\aa.txt')) # D:\python
# 当然使用下面的函数可以同时获得以上两者
print(os.path.split(r'D:\python\aa.txt'))  # ('D:\\python', 'aa.txt')

以其他方式分割

print(os.path.splitext(r'D:\python\aa.txt')) # ('D:\\python\\aa', '.txt')
print(os.path.splitdrive(r'D:\python\aa.txt')) # ('D:', '\\python\\aa.txt')

os.path.splitext这个函数以可以方便地获取文件后缀名,如果提供地路径是文件夹,那么返回空。

os.path.splitdrive以盘符作为分隔。

注意,它们都返回元组

检查路径

检查一个路径存不存在,是文件?还是文件夹?

print(os.path.isfile('D:\python')) # False
print(os.path.isdir('D:\python'))  # True
print(os.path.exists('D:\python'))  # True

创建文件夹

os.mkdir('D:\good') # True 只能建立一级不存在的目录,若已存在会报错
os.mkdir('D:\good\job') # True 注释掉上一句,由于D:\good已经存在,这里相当于还是只新建了一级不存在的目录
os.mkdir(r'D:\aa\bb') # 报错!!由于aa和bb文件夹都不存在,找不到D:\aa路径,故不能创建os.makedirs(r'D:\aa\bb')  # 此函数没有上上面的限制,管他存不存在一股脑儿创建,反正最后会生成此路径就是了。不过如果此路径已经存在了,就会报错了

由此可以看出os.makedirs更常用,可以创建处路径里所有的文件夹。而os.mkdir还必须保证上级目录存在,所以只能新建一级目录。

连接路径

print(os.path.join(r'D:\python', 'aa.txt')) # D:\python\aa.txt

这个函数也很常用,用于连接两个路径,组合成新路径返回。

遍历文件夹

# 返回元组,分别是当前文件夹路径, 当前路径下的子文件夹,当前路径下的文件
for current_path, subfolders, filesname in os.walk(r'D:\Cleaner'):print(f'{current_path}\n{subfolders}\n{filesname}')print('-'*30)

os.walk可以递归遍历给定路径下所有地文件和文件夹。看下该目录下这个函数会打印什么。这个函数会返回一个元组,分别是(当前路径, 该路径下的所有文件夹, 该路径下的所有文件),然后不断递归深入,不断返回这样的元组。所以上面的for循环执行了多次,直到路径最深处。

D:\Cleaner
['CCleaner']
['desktop.ini']
------------------------------
D:\Cleaner\CCleaner
['Lang']
['branding.dll', 'business.dat', 'CCleaner.dat', 'CCleaner.exe', 'ccleaner.ini', 'CCleaner64.exe', 'portable.dat']
------------------------------
....

删除文件/文件夹

# 永久删除,不进入回收站
os.remove(r'D:\aaaa.txt')  # same as os.unlink()
# 目录为空才能删除, 只是删除当前文件夹
os.rmdir(r'D:\aaa\bbb\ccc\eee')
# 这个方法也不能删除非空目录,但是删除了空文件夹子eee后若发现父级文佳夹也空就一并删除
os.removedirs(r'D:\aaa\bbb\ccc\eee')  # 剩下D:\aaa\bbb
# 强力,该目录下所有文件/文件夹全部删除,不管内容空不空。慎用
shutil.rmtree(r'D:\aaa')

重命名

# 重命名文件夹,必须保证原路径存在,目标路径不能已存在
os.rename(r'D:\python', 'D:\good')
# 重命名文件,必须保证原路径存在,目标路径不能已存在
os.rename(r'D:\good\aa.txt', r'D:\good\bb.txt')# 上面都不能再目标地址存在的情况下使用,这个函数粗暴,如果目标路径已存在,则会覆盖之,慎用
os.replace(r'D:\good\bb.txt', r'D:\good\cc.txt')

获取文件的大小

得到文件的大小,以字节为单位

print(os.path.getsize(r'D:\good\cc.txt'))

shutil模块

os模块的功能相当强大,但是还有部分功能,比如复制/剪切文件和文件夹存在与shutil模块中。

直接看代码吧

copy

# 如果Movie目录存在,则是把这个文件复制到了该目录下。
des1 = shutil.copy(r'D:\findall.txt', r'E:\Movie')
# 如果没有该目录,则新建Mov文件,无后缀名
des2= shutil.copy(r'D:\findall.txt', r'E:\Mov')
# 当然指定了后缀名,就把源文件复制过去并重命名
des2= shutil.copy(r'D:\findall.txt', r'E:\Mov.txt')
# copy只复制最后访问时间
des3 = shutil.copy(r'D:\findall.txt', r'E:\findit.txt')
# copy2同时拷贝所有元数据包括修改时间和最后访问时间
des4 = shutil.copy2(r'D:\findall.txt', r'E:\find.txt')
# 不拷贝访问时间和修改时间
des5 = shutil.copyfile(r'D:\findall.txt', r'E:\findaa.txt')
# 可以看到返回的是新文件所在的路径
print(f'{des1}\n{des2}\n{des3}')
# 拷贝整个文件夹(里面所有内容)到另外一个文件夹,该文件夹不能是已经存在的文件夹
shutil.copytree(r'D:\abc', r'E:\Movie')

move

# 剪切文件, abc不存在就移动文件并改名为abc, abc目录存在则放入该目录
shutil.move(r'D:\findall.txt', r'E:\abc')
# 目标地址若是文件,则是移动并重命名
shutil.move(r'D:\findall.txt', r'E:\aa.txt')
# 剪切文件夹,如果目标目录已经存在,则剪切并放入该目录,如果目标目录不存在,则相当于移动目录到目标地址并重命名文件夹
shutil.move(r'D:\abc', r'E:\avb')

ok,对文件和目录的操作也是日常生活中经常会使用到的。学习了这些已经可以自动完成很多操作了。

转载自https://www.cnblogs.com/sun-haiyu/p/7082058.html

Python操作文件和目录相关推荐

  1. python操作文件和目录_Python操作文件和目录

    Python操作文件和目录 读写文件比较简单,有一点特别注意就好了 windows下Python默认打开的文件以gbk解码,而一般我们的文件是utf-8编码的,所以如果文本含有中文,就会出现异常或者乱 ...

  2. python操作文件和目录_python文件和目录操作方法

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件 ...

  3. 三十四 操作文件和目录

    如果我们要操作文件.目录,可以在命令行下面输入操作系统提供的各种命令来完成.比如dir.cp等命令. 如果要在Python程序中执行这些目录和文件的操作怎么办?其实操作系统提供的命令只是简单地调用了操 ...

  4. Python操作文件,报FileNotFoundError: [Error 2] No such file or directory错误

    python操作文件时,报No such file or directory错误. 多次检查目录.文件名.语法都是对的. 折腾一番后,打开文件所在文件夹,并显示所有文件后缀名,才发现此文件并没有txt ...

  5. 用Python操作文件

    文章来源:https://book.apeland.cn/details/328/ 文章目录 说明 操作模式 创建文件 只读模式 追加模式 循环文件 其它功能 mode name fileno flu ...

  6. Python操作文件

    Python操作文件 1. python操作word文件 先导入模块 from docx import Document(文档) from docx.shared import Inches,Pt,R ...

  7. 原版英文书籍《Linux命令行》阅读记录4 | 操作文件和目录

    背景: 阅读英文原作只为了更好地理解书中的精髓,当然也是为了更好地掌握书中的技巧.我们会坚持阅读全书,并记录书中的精髓. 从本章节开始,开始真正的实战. 主要学习以下命令: cp mv mkdir r ...

  8. python 删除文件、目录_python如何删除文件、目录

    本文讲述了python实现删除文件与目录的方法.分享给大家供大家参考.具体实现方法如下: os.remove(path) 删除文件 path. 如果path是一个目录, 抛出 OSError错误.如果 ...

  9. python购物车程序详解用字典_使用python操作文件实现购物车程序

    使用python操作文件实现购物车程序 题目要求如下: 实现思路 始终维护一张字典,该字典里保存有用户账号密码,购物车记录等信息.在程序开始的时候读进来,程序结束的时候写回文件里去.在登录注册的部分, ...

最新文章

  1. 面向对象和基于对象的区别
  2. PowerDesigner中如何给字符串字段设置默认值 .
  3. python划分有限元网格_有限元网格划分应该考虑些什么
  4. 合并多个Word文档
  5. python matplotlib.pyplot中的.plot()和.scatter()以及.subplot()和.add_axes()区别
  6. 【Azure Show】|第九期 “我的计算机入门之路” 嘉宾秦婷婷汪宇杰文轩
  7. dbms数据库管理系统_数据库管理系统(DBMS)中的视图
  8. Qt文档阅读笔记-QSet官方解析及实例
  9. jQuery源码解析(2)—— Callback、Deferred异步编程
  10. ROOBO公布A轮1亿美元融资 发布人工智能机器人系统
  11. Chrome 将内置 QR 扫码共享页面功能
  12. Python入门--以主程序的方式运行,if __name__==‘__main__‘
  13. Unity自定义Editor简明教程
  14. 高数:自然数的无穷大符号--->n_max(高等数学的唯一根基所在)
  15. ❤️❤️固高运动控制卡的相关知识点
  16. 工具说明书 - 网页死链检测工具XENU及其名字来历
  17. android 登录界面 布局,Android基本布局和登录界面的设计
  18. APP测试:禁止APP登录页面截图解决方法
  19. PDA应用软件开发特点
  20. css图片菜鸟教程,css 常用样式(分享)

热门文章

  1. pandas series取值_【小学生级】pandas入门到精通备查表——AI未来系列3
  2. vc2010 mysql5.7_VC2010利用MySQL++访问mysql. 及连接池示例
  3. Android坑点-ByteBuffer.array() 入过坑吗
  4. mysql explain字段含义_史上最全的explain常见结果含义分析,值得收藏
  5. Lingo计算最优解
  6. c语言中闰年 日期 天数 统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形
  7. 上下位机串口通信 python_怎么将图片通过串口发送给下位机?
  8. java大量浮点数如何作比较,Java如何正确比较浮点数
  9. 基于jsp+mysql+mybatis+Spring boot简单学生成绩信息管理系统
  10. centos7 修改为任意网卡名_VirtualBox虚拟机双网卡配置实现与本机互通并上网