孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

时间:2023-03-08 18:09:21
孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容
 孤荷凌寒自学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的文件操作之针对文件操作的os模块的相关内容

孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容