孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容
(完整学习过程屏幕记录视频地址在文末,手写笔记在文末)
一、打开文件后,要务必记得关闭,所以一般的写法应当放在异常捕捉环境中。
try:
此处放打开文件的语句块 f= open(文件,‘打开模式’,encoding=’文本编码’)
执行打开文件后的操作语句块
except ……:
……
else:
这儿可以继续放其它要执行的正常语句块
finally:
这儿必须有关闭文件的语句。f.close()
但我们可以简化地写成:
with open(文件,‘打开模式’,encoding=’文本编码’) as f:
此处就可以对f对象(就是一个file对象)进行操作了
使用这种方法的话,是完全不用书写关闭文件的语句的。
二、os模块中对于文件操作的相关子模块
os模块中的子模块:os.path模块
必须先引用声明后才能使用,引用方式:
import os.path
os.path类下的大部分方法都直接可以通过类名调用,无需将类实例化为具体的对象。
1
os.path.abspath(相对文件路径名)
相对文件路径名,是针对于绝对路径文件名(完整路径文件名而言)的
相对文件路径如:
1.txt
上面的文件路径,默认就是此当前目录 下的1.txt
但我们并不知道其完整的路径名。
而绝对路径(完整路径文件名)如:
windows系统下:
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天\1.txt
linux系统下:
/home/pw/eclipse-workspace/py1/1.txt
此方法返回文件的完整路径和文件名。
2
os.path.dirname(绝对文件路径或绝对文件夹路径)
执行此方法将返回绝对路径中上级目录(上一级文件夹)的绝对路径。
3
os.path.basename(绝对文件路径或绝对文件夹路径)
执行此方法 将返回绝对路径中的 相对文件名 或 相对文件夹名
4
os.path.exists(文件名或目录名)
执行此方法 将返回指定的文件名或目录名是否存在的布尔对象。
5
os.path.isabs(文件或目录名)
执行此方法 将返回指定的文件名称或目录名是否是绝对路径的布尔对象。
6
os.path.isfile(文件名或目录名)
执行此方法 将返回指定的文件名或目录名是否是 一个文件 的布尔对象。
7
os.path.isdir(文件名或目录名)
执行此方法 将返回指定的文件名或目录名 是否是 一个文件夹 的布尔对象。
8
os.path.getsize(文件名)
执行此方法 将返回指定的文件名的文件的占用磁盘空间的大小,单位为byte.
9
os.path.split(绝对文件名或绝对目录名)
执行此方法 将把绝对文件名分成两部分:上一级文件夹名 和 纯粹的相对文件名
并将这两部分组合成一个元组对象后返回。
10
os.path.splitdive(绝对文件名或绝对目录名)
执行此方法 将把绝对文件名分成两部分: 盘符 和 除开盘符之外的部分
并将这两部分组合成一个元组对象后返回。
对于linux系统而言是没有盘符的,因此,盘符部分为空字符串。
11
os.path.join(绝对路径的文件夹名,纯粹的相对文件名)
执行此方法 将把【绝对路径的文件夹名】与【纯粹的相对文件名】组合成一个完整的绝对路径。
特别注意:
【绝对路径的文件夹名】中的所有/符号必须有两种情况:
可以直接使用下边左移的的斜杠
/
如果使用下边右移的斜杠
\
就必须转义表达为:
\\
否则执行此方法不会成功。
经测试传递给本方法的第一个形参的下列写法是正确的:
I:\\MAKEAPP\\python\\Python365\\边学习边测试文件夹\\自学PYTHON部分\\0035第三十五天\\
/home/pw/eclipse-workspace/py1
执行下面的语句进行测试:(win10下使用vscode环境)
import os.path
strfile='1.txt'
strLongPath=os.path.abspath(strfile)
print(strLongPath)
strShortNm=os.path.basename(strLongPath)
print(strShortNm)
strDirNm=os.path.dirname(strLongPath)
print(strDirNm)
strShortDirNm=os.path.basename(strDirNm)
print(strShortDirNm)
isHad=os.path.exists(strfile)
print(isHad)
isHad=os.path.exists(strLongPath)
print(isHad)
isHad=os.path.exists(strDirNm)
print(isHad)
isHad=os.path.exists(strShortDirNm)
print(isHad)
isHad=os.path.exists('../' +strShortDirNm)
print(isHad)
intSize=os.path.getsize(strfile)
print(intSize)
isAbs=os.path.isabs(strfile)
print(isAbs)
isAbs=os.path.isabs(strLongPath)
print(isAbs)
isFile=os.path.isfile(strfile)
print(isFile)
isFile=os.path.isfile(strDirNm)
print(isFile)
strOnlyPath=os.path.splitdrive(strLongPath)
strOnlyFile=os.path.split(strLongPath)
print(strOnlyPath)
print(strOnlyFile)
strTemp=os.path.join(strOnlyFile[0],strOnlyFile[1])
print(strTemp)
strLs=os.path.join('I:\\MAKEAPP\\python\\Python365\\边学习边测试文件夹\\自学PYTHON部分\\0035第三十五天\\','1.txt')
print(strLs)
运行结果:
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天\1.txt
1.txt
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天
0035第三十五天
True
True
True
False
True
34
False
True
True
False
('I:', '\\MAKEAPP\\python\\Python365\\边学习边测试文件夹\\自学PYTHON部分\\0035第三十五天\\1.txt')
('I:\\MAKEAPP\\python\\Python365\\边学习边测试文件夹\\自学PYTHON部分\\0035第三十五天', '1.txt')
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天\1.txt
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天\1.txt
执行下面的语句,在linux(fedora)系统eclipse环境下测试:
import os.path
import shutil
strfile='1.txt'
with open(strfile,'w',encoding='utf-8') as f:
lstA=['孤荷凌寒\n','QQ号是_\n','578652607']
f.writelines(lstA)
isHad=os.path.exists(strfile)
print(isHad)
strpath=os.path.dirname(strfile)
print(strpath)
strlongfile=os.path.abspath(strfile)
print(strlongfile)
strpath=os.path.dirname(strlongfile)
print(strpath)
tplB=os.path.split(strlongfile)
tplC=os.path.splitdrive(strlongfile)
print(tplB)
print(tplC)
strfile2=os.path.join(tplB[0],tplB[1])
print(strfile2)
strfile2=os.path.join('\\home\\pw\\eclipse-workspace\\py1',tplB[1])
print(strfile2)
输出结果:
True
/home/pw/eclipse-workspace/py1/1.txt
/home/pw/eclipse-workspace/py1
('/home/pw/eclipse-workspace/py1', '1.txt')
('', '/home/pw/eclipse-workspace/py1/1.txt')
/home/pw/eclipse-workspace/py1/1.txt
\home\pw\eclipse-workspace\py1/1.txt
三、os模块中的其它文件操作方法
os.walk(目录名)
执行此方法将返回从【目录名】开始的全部文件树的迭代器。
文件树中,包含:
所有目录
所有子级目录
每个目录中的文件
三大类的信息集合。
如果将此迭代器强制转换为list(列表),则会显示成一个复杂的嵌套列表。
一般可以通过如下方法遍历此 迭代器的所有对象:
for dir,subdir,f in tree:
……
其中tree就是指执行此方法后返回的迭代器。
循环体中的dir将依次获得每循环次的当前目录名,subdir将依次获得每循环次的子目录名列表,f将依次获得每循环次的文件名列表。
在windows下执行下面的操作:
import os.path
#importos.walk #没有这个模块!因为walk只是os中的一个方法
import shutil #这才是一个模块,专门用于文件操作的,需要引用
import glob
strfile='1.txt'
strlongfile=os.path.abspath(strfile)
strpath=os.path.dirname(strlongfile)
print(strpath)
objA=os.walk(strpath)#将列出strpath中的全部文件夹和文件,包括子目录中的,形成一棵树,返回的是一个迭代器
for dir,subdir,fin objA:
print(dir)
print(subdir)
print(f)
运行结果:
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天
['.idea', 'a']
['1.txt', '3.txt', '4.txt','5.txt', '6.txt', 'ghlh_python_35th_文件操作_os模块中有关文件操作的方法(一).py','ghlh_python_35th_文件
操作_os模块中有关文件操作的方法(一)的运算结果.txt', 'ghlh_python_35th_文件操作_os模块中有关文件操作的方法(二).py','ghlh_python_35th_文件操作_在linux系统下的测试.py', 'ghlh_python_35th_文件操作_在linux系统下的测试的运算结果.txt', 'ghlh_python_35th_文件操作_通过with语句来打开文件.py']
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天\.idea
['libraries']
['misc.xml', 'modules.xml','workspace.xml', '第三十四天.iml']
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天\.idea\libraries
[]
['R_User_Library.xml']
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天\a
['b', 'c']
['4.txt']
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天\a\b
['d']
['2.txt']
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天\a\b\d
[]
['1.txt']
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天\a\c
[]
['3.txt']
在linux(fedora)下执行下列操作:
obj=os.walk('\\home\\pw\\eclipse-workspace\\py1')
lstD=list(obj)
print(lstD)
运行结果:
[('/home/pw/eclipse-workspace/py1',['__pycache__'], ['.project', 'firstpage.py', '.pydevproject', '3.txt','1.txt']), ('/home/pw/eclipse-workspace/py1/__pycache__', [],['firstpage.cpython-36.pyc'])]
四、shutil模块
使用shutil模块前必须声明引用:
import shutil
主要方法如下:
1
copyfile(源文件名,目标文件名)
copy(源文件名,目标文件名)
copy2(源文件名,目标文件名)
上面三个操作都可以完成文件复制操作,但区别如下:
copyfile只复制了文件的内容,而文件的属性和权限标识等都没有复制;
copy只复制了文件的内容和权限标识,但没有复制文件的属性;
copy2完全复制了文件的全部信息,包括文件内容,文件的属性与文件的权限标识。
如果源文件不存在 ,将报错!
【注意】
经测试,在windows下没有发现三个的太大区别,特别是属性当中的【隐藏】属性;此外windows下设置的用户权限在三个复制命令中,都没有得到复制。
在linux下的操作区别较为明显。
2
copytree(源文件夹名,目标文件夹名)
此方法将完整的复制指定的文件夹到目标文件夹,包含所有子文件夹和文件树。
如果源文件夹不存在 ,将报错!
3
rmtree(要删除的文件夹名)
此方法将完全删除指定的文件夹,同时也就删除了指定文件夹下的所有子文件夹和文件树。
如果要删除的文件夹不存在 ,将报错!
4
move(源文件名或源文件夹名,目标文件名或文件夹名)
此方法将移动源文件到目标文件位置。
如果要移动的源不存在,将报错。
五、查找出指定目录下(不包含子目录)的符合筛选特征的文件列表
引用声明:
import glob
使用glob模块的glob()方法可以列出符合筛选条件的文件列表,返回的是绝对文件名组成的迭代器:
1
glob.glob(筛选条件的文件名的纯文件名部分没有路径信息)
这种方法是指在当前Py文件的当前目录下查找符合【筛选条件的文件名】列表
筛选字符串支持通配符号:*
2
glob.glob(指定的盘符及路径同时指定筛选文件名)
这时相当于指定了绝对路径
这两种情况都只传递了一个参数。
如果指定的文件夹不存在 ,将报错。
测试如下:
files=glob.glob('*.txt')
for a in files:
print(a)
print('----下面是指定绝对路径的测试--------')
files=glob.glob('I:\\MAKEAPP\\python\\Python365\\边学习边测试文件夹\\自学PYTHON部分\\0035第三十五天\\*.py')
for a in files:
print(a)
运行结果:
1.txt
3.txt
4.txt
5.txt
6.txt
ghlh_python_35th_文件操作_os模块中有关文件操作的方法(一)的运算结果.txt
ghlh_python_35th_文件操作_在linux系统下的测试的运算结果.txt
----下面是指定绝对路径的测试--------
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天\ghlh_python_35th_文件操作_os模块中有关文件操作的方法(一
).py
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天\ghlh_python_35th_文件操作_os模块中有关文件操作的方法(二
).py
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天\ghlh_python_35th_文件操作_在linux系统下的测试.py
I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0035第三十五天\ghlh_python_35th_文件操作_通过with语句来打开文件.py
——————————
今天整理的学习笔记完成,最后例行说明下我的自学思路:
根据过去多年我自学各种编程语言的经历,认为只有真正体验式,解决实际问题式的学习才会有真正的效果,即让学习实际发生。在2004年的时候我开始在一个乡村小学自学电脑 并学习vb6编程语言,没有学习同伴,也没有高师在上,甚至电脑都是孤岛(乡村那时还没有网络),有的只是一本旧书,在痛苦的自学摸索中,我找到适应自己零基础的学习方法:首先是每读书的一小节就作相应的手写笔记,第二步就是上机测试每一个笔记内容是否实现,其中会发现书中讲的其实有出入或错误,第三步就是在上机测试之后,将笔记改为电子版,形成最终的修订好的正确无误的学习笔记。
通过反复尝试错误,在那个没有分享与交流的黑暗时期我摸黑学会了VB6,尔后接触了其它语言,也曾听过付费视频课程,结果发现也许自己学历果然太低,就算是零基础的入门课程,其实也难以跟上进度,讲师的教学多数出现对初学者的实际情况并不了解的情况,况且学习者的个体也存在差异呢?当然更可怕的是收费课程的价格往往是自己难以承受的。
于是我的所有编程学习都改为了自学,继续自己的三步学习笔记法的学习之路。
当然自学的最大问题是会走那么多的弯路,没有导师直接输入式的教学来得直接,好在网络给我们带来无限搜索的机会,大家在网络上的学习日志带给我们共享交流的机会,而QQ群等交流平台、网络社区的成立,我们可以一起自学,互相批评交流,也可以获得更有效,更自主的自学成果。
于是我以人生已过半的年龄,决定继续我的编程自学之路,开始学习python,只希望与大家共同交流,一个人的独行是可怕的,只有一群人的共同前进才是有希望的。
诚挚期待您的交流分享批评指点!欢迎联系我加入从零开始的自学联盟。
这个时代互联网成为了一种基础设施的存在,于是本来在孤独学习之路上的我们变得不再孤独,因为网络就是一个新的客厅,我们时刻都可以进行沙龙活动。
非常乐意能与大家一起交流自己自学心得和发现,更希望大家能够对我学习过程中的错误给予指点——是的,这样我就能有许多免费的高师了——这也是分享时代,社区时代带来的好福利,我相信大家会的,是吧!
根据完全共享的精神,开源互助的理念,我的个人自学录制过程是全部按4K高清视频录制的,从手写笔记到验证手写笔记的上机操作过程全程录制,但因为4K高清文件太大均超过5G以上,所以无法上传至网络,如有需要可联系我QQ578652607对传,乐意分享。上传分享到百度网盘的只是压缩后的720P的视频。
我的学习过程录像百度盘地址分享如下:(清晰度:1280x720)
链接:https://pan.baidu.com/s/1dD1ArqpUO4DHO_Pxw3K5PA 密码:ruem
Bilibili:
https://www.bilibili.com/video/av37645205/
喜马拉雅语音笔记:
https://www.ximalaya.com/keji/19103006/144111442
孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容的更多相关文章
- 孤荷凌寒自学python第三十九天python 的线程锁Lock
孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...
- 孤荷凌寒自学python第三十八天初识python的线程控制
孤荷凌寒自学python第三十八天初识python的线程控制 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.线程 在操作系统中存在着很多的可执行的应用程序,每个应用程序启动后,就可以看 ...
- 孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化
孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.什么是序列化与反序列化 序列化是指将内存中的数据进行指 ...
- 孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习
孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.close() 当一个file对象执行此方法时,将关闭当前 ...
- 孤荷凌寒自学python第三十三天python的文件操作初识
孤荷凌寒自学python第三十三天python的文件操作初识 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天开始自学python的普通 文件操作部分的内容. 一.python的文件打开 ...
- 孤荷凌寒自学python第三十一天python的datetime.timedelta模块
孤荷凌寒自学python第三十一天python的datetime.timedelta模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) datetime.timedelta模块是一个表示 ...
- 孤荷凌寒自学python第三十天python的datetime.datetime模块
孤荷凌寒自学python第三十天python的datetime.datetime模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) datetime.datetime模块包含了:datet ...
- 孤荷凌寒自学python第三天 初识序列
孤荷凌寒自学python第三天 初识序列 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python的序列非常让我着迷,之前学习的其它编程语言中没有非常特别关注过序列这种类型的对象,而pyt ...
- 孤荷凌寒自学python第八十六天对selenium模块进行较详细的了解
孤荷凌寒自学python第八十六天对selenium模块进行较详细的了解 (今天由于文中所阐述的原因没有进行屏幕录屏,见谅) 为了能够使用selenium模块进行真正的操作,今天主要大范围搜索资料进行 ...
随机推荐
- 数集合有多少个TOJ(2469)
题目链接:http://acm.tju.edu.cn/toj/showp2469.html 感觉这个题目有点问题,算了不管他了,反正A了. 这里要注意的是求这个集合有多少种,那么就是要剔除重复数后,再 ...
- 今天 小小收获, 看了 sam Xiao 的好帖子 明白了 泛型委托 的 意思。
Func<int,int,int> cAdd1 = (int x, int y) => { return x + y; }; int result= aAdd1(1,2); cons ...
- Multigrid for Poisson’s Equation
泊松方程如何用多重网格求解 来源:佐治亚理工学院 教授:Prof. Richard Vuduc 主页:http://vuduc.org/index.php 教授内容:http://vuduc.org/ ...
- 武者Vue
1 - Introduction 2 - The Vue Instance 3 - Data & Methods 4 - Data Binding 5 - Events 6 - Event M ...
- 理解golang中的function types
先找个例子来看一下: package main import "fmt" // Greeting function types type Greeting func(name st ...
- java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)
本篇我们将讨论以下知识点: 1.线程同步问题的产生 什么是线程同步问题,我们先来看一段卖票系统的代码,然后再分析这个问题: package com.zejian.test; /** * @author ...
- Webpack4 学习笔记二 CSS模块转换
前言 此内容是个人学习笔记,以便日后翻阅.非教程,如有错误还请指出 webpack 打包css模块 webpack是js模块打包器, 如果在入口文件引入css文件或其它的less.sass等文件,需要 ...
- JavaScript中并非一切皆对象
对象是js中的基础以及核心,在js中有六种主要类型:string number boolean null undefined object 除了oject类型以为其他五种本身并非对象,null本身 ...
- Q&A - 如何获取ip地址所在地
获取其IP地址后,传入以下URL,并请求该URL,该请求会响应一个JSON格式的数据包,该IP地址的所在地均在这个数据包内 http://int.dpool.sina.com.cn/iplooku ...
- Linux实战教学笔记15:用户管理初级(下)
第十四节 用户管理初级(下) 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,用户查询相关命令id,finger,users,w,who,last,lastlog,gr ...