(完整学习过程屏幕记录视频地址在文末,手写笔记在文末)
一、打开文件后,要务必记得关闭,所以一般的写法应当放在异常捕捉环境中。
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/
喜马拉雅语音笔记: