Python操作文件和目录

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

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 os

print(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,对文件和目录的操作也是日常生活中经常会使用到的。学习了这些已经可以自动完成很多操作了。

by @sunhaiyu

2017.6.26

python操作文件和目录_Python操作文件和目录相关推荐

  1. python对文件的操作都有什么_python中文件操作的相关内容总结(附示例)

    本篇文章给大家带来的内容是关于python中文件操作的相关内容总结(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1. 文件操作介绍 说到操作文件我们肯定会想到流,文件的操 ...

  2. python基金会主席入门教程_Python基金会-文件IO操作,python,基础

    函数 功能 open 打开文件 read 读取文件 write 写文件 close 关闭文件 readline 行读取 readlines 多行读取 open方法 open方法: 打开一个文件,返回一 ...

  3. python windows和linux路径_python复制文件,路径不存在问题(Windows和linux路径分隔符不统一)...

    问题: python脚本涉及到复制文件,而我们需要兼容Windows.linux和mac环境 (Windows和linux的路径分隔符不同:通过os.path.sep查看分隔符) 如果用[路径名+os ...

  4. python的文件读取方式_python中文件读取方式

    指\u201CPython编程:从入口到实践\u201D和\u201CPython编程快速启动\u201D1.文件路径获取文件路径包括绝对路径和相对路径.绝对路径是指\u201CE: \\ \\\u2 ...

  5. python 电脑文件变动提醒_Python整理文件方法,效率提升100倍-docx是什么文件

    现在人们经常要去下载或者接收一些文件. 比如说同事传来的文档,自己建立的文件,想看的电影等等,那大家都会怎么处理这些文件呢? 科研工作者.学生们可能需要阅读大量的文献,我们也需要阅读很多的电子书等等, ...

  6. python程序怎样在手机上_python手机文件怎么上传至电脑?

    本文讲解python的一个内置文件传输下载器,可以用来在局域网内进行文件传输,当然可能有人会问,我用微信QQ也能传,为什么还要用python来传输下载?在此,其实我个人感觉的是,这种操作更简单,省了时 ...

  7. 用python向mongodb插入数据_Python操作MongoDB数据库(一)

    Python操作MongoDB数据库(一) 前言 干货文章继续出发!隔的时间有些久了哈,对 MongoDB 安装回顾的同学,可以看下windows环境 <初识 MongoDB 数据库>.这 ...

  8. python文件是否存在_Python判断文件是否存在的三种方法

    通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try ...

  9. python读文件完整代码_Python读写文件的代码示例

    本篇文章给大家带来的内容是关于Python读写文件的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助 一.读取文件 读取文件步骤: 1.找到文件 2.打开文件 3.读取文件内容 ...

最新文章

  1. XT910开通了GPRS却上不了网的原因--“数据漫游”功能关闭导致的
  2. python +keras实现图像分类(入门级例子讲解)
  3. 谁的人生不迷茫?在这5句诗词里,有你想要的答案
  4. 初始化mysql的数据库失败_初始化mysql的数据库失败怎么办
  5. c++ 遍历所有点且距离最短_C/C++ 图的最短路径 Dijkstra 算法
  6. 启动之后自己关闭_电脑一开都是广告,请问怎么永久关闭?
  7. 终于有人把AI、BI、大数据、数据科学讲明白了
  8. 【十万个编程篇】写文章与“写项目”的差别
  9. 3dmax shift用来复制对象
  10. Atitit 业务流程执行引擎的实现 目录 1.1. 引擎实现语言java js php等 1 1.2. 流程语言 xml sql js等 业务流程定义语言规范总结 1 1.3. 实体方法定义 2
  11. xwt100编程器使用方法与xtw100没有找到编程器解决办法
  12. App登录方式和测试重点总结
  13. Java通过axis调用WebService
  14. Grafana接入Elasticsearch数据,绘制dashboard
  15. networking /etc/network/interfaces 笔记221102
  16. 果集数据:从化妆镜切入“她”赛道,Amiro如何挖掘科技美护市场新机会?
  17. Aspose.PDF for Java 20.x
  18. 华为HarmonyOS 鸿蒙,符合华为鸿蒙HarmonyOS更新的设备
  19. 使用Xilinx约束
  20. 计算机视觉8—基于BOW模型的图像检索和匹配

热门文章

  1. android源码framework下添加新资源的方法
  2. 【读书笔记】iOS-ARC-不要向已经释放的对象发送消息
  3. ASP.NET中App_Code,App_Data等文件夹的作用
  4. Android 自定义View的使用纪要!!!
  5. 在解决方案中所使用 NuGet 管理软件包依赖
  6. Ajax跨域问题的两种解决方法
  7. 如何解决java.lang.NoClassDefFoundError:Java 9中的javax / xml / bind / JAXBException
  8. jQuery的jquery-1.10.2.min.map触发404(未找到)
  9. 如何按PHP中给定键的值对关联数组进行排序?
  10. 如何将struct System.Byte byte []转换为C#中的System.IO.Stream对象?