python中,关于目录与文件的操作,往往都是利用这两个模块完成的:os模块,shutil模块。
- os:operate system(操作系统相关模块),文件的基本处理
- shutil:文件和目录的复制、移动、删除、压缩、解压等高级处理
目录
目录
1.获取系统类型
1.1os.name
import os
os.name
结果:'nt'-->表示Windows系统
'posix'-->表示Linux系统
另有'ce','java'等
注解:对代码进行兼容性开发时,常常需要利用这个函数判断系统的类型,以便针对性做出不同的调整.
if(os.name=='nt'):
1.2更详细的操作系统信息——sys.platform
sys.platform
2.获取系统环境
对系统环境变量进行设置时,常常利用os模块中的environ属性(environment是‘环境’的英文)
os.environ返回的系统变量是字典形式的,如果要获取具体环境变量的属性值,既可以直接索引输出,也可以使用方法getenv('key值')
3.执行系统命令
所谓执行系统命令,就是指让计算机执行在cmd命令行中运行的命令,只不过现在是在python的编译下输入。
os.system("命令行命令")
如果shell命令正常执行,则返回0
PS:值得注意的是,在非控制台编写时,system()只会调用系统命令而不会执行,执行结果可通过popen()函数返回file对象进行读取获得。
*4 操作目录及文件
使用os模块操作目录和文件是python开发最为常见的功能之一。熟练掌握它对pyhton开发尤为重要。
4.1获取当前目录
获取当前python脚本工作的目录路径,该函数没有参数。
import os os.getcwd() 返回当前python脚本所在位置 如:"c:\\Users\\xxxx\\AppData\\Local\\Programs\\Python\\Python37"
4.2更改目录
相当于shell命令中的cd,从函数名很容易理解它需要目标路径作为参数
os.chdir('E:') #这就是把终端工作空间转移到了E:,相当于说,在终端输入了:cd E: #此时用getcwd检验 os.getcwd() 结果是:'E:\\'
4.3列举目录下的所有文件
os.listdir(path)可以获得一个列表,列表元素为path下的所有文件名。
os.listdir('E:\\test')
结果:['index.html','one.txt','os.py']
4.4 创建及删除空目录
#创建单个目录 os.mkdir(path) #创建多级目录 os.makedirs(path) #创建单个目录——mk表示make,dir表示目录 #创建多级目录——dirs表示多级目录 #删除单级空目录 os.rmdir(path) #删除多级空目录 os.removedirs(path) #删除单级目录——rm表示remove #PS:上述两个删除目录的函数中,若path下非空,则报错。
4.5重命名目录或文件
使用os.name()函数可以重命名目录或文件
os.rename('dir_1','dir_2')
其中,dir_1是原名称,dir_2是要更改成的名称
注:os.path模块主要是跟一些路径操作有关
4.6绝对路径和相对路径的关联。
参考
https://wenda.so.com/q/1461261839722586
https://blog.csdn.net/pingdouble/article/details/50678337
http://blog.csdn.net/porcupinefinal/
简而言之,以c:或者\盘符开头的路径即为绝对路径,而,以.或者..开头的即为相对路径。
至于为什么要区分相对绝对路径,举个例子:假如你的代码调用了一个位于C盘某路径下的img,当代码跨平台运行时,别人的img却可能存放在D盘,这样就会出错,因此采取相对路径,即是说,相对于本文件的位置。
获取绝对路径:
1.os.path.abspath(path) #abs是绝对值函数的函数名,abspath即是绝对路径
可以获取path的绝对路径
2.更改为os.path.abspath('.')
即可以获取当前路径
os.path.abspath('..')
即可获取上级路径
4.7路径分解与组合
1.路径的分解
os.path.split(path) split在string的函数中见过,是分割的意思
函数将path分解成(文件夹,文件名),返回一个二元组
例如,C:\\123\\45\\678
意味着C:\\123\\45是文件夹,678是文件名
若,C:\\123\\45\\678\\
意味着上述全为文件夹,返回的二元组中,文件名为空
同理,也存在只有文件夹,而没有文件名的情况:当path字符串中均无\\时
总结:以最后的\\为标志符,认为之后为文件名,之前为文件夹。
2.路径的组合
os.path.join(dir_1,dir_2,dir_3,...)
意思为:将dir_2,dir_3等以文件名的方式逐级加在文件夹dir_1下。
形成:dir_1\\dir_2\\dir_3...的层次
4.8返回目录和文件名
path = 'D:\\123\\456\\78' #以path字符串中最后一对\\为标志,之前的部分为文件夹,之后的部分为文件名 #获取path中文件夹部分 os.path.dirname(path) 返回D:\\123\\456 #获取path中文件名 os.path.basename(path) 返回78 PS:如果path是D:\\123\\456\\,文件名将会返回的是空字符串 如果path是.,文件名将返回的也是.
- 注1:文件夹(file foledr)或者说文件目录的英文是directory,表示文件索引表,缩写dir。
- 注2:这里的base指的是base document——基础文件。
4.9判断以及获取文件或者文件夹信息
1.判断类
- os.path.exists(path) 判断文件或者文件夹是否存在,存在返回True,不存在返回False。
- os.path.isfile(path)判断路径是否是一个文件
- os.path.isdir(path)判断路径是否是一个目录
- os.path.isabs(path)判断路径是否是绝对路径
2.获取目录或文件信息
- os.path.getsize(path)获取文件夹或文件大小
- os.path.getctime(path)获取文件夹或文件创建时间 c——creat
- os.path.getatime(path) 获取文件夹或文件最后访问时间 a——access接近,进入,使用,获取
- os.path.getmtime(path) 获取文件夹或文件最后修改时间 m——move
4.10表现形式参数
>>> os.sep
'\\'
>>> os.extsep
'.'
>>> os.pathsep
';'
>>> os.linesep
'\r\n'
4.11加上一个自认为很好用的调用
for root,fa,files in os.walk(path):
file in files:
...
os.walk返回三个参数,其中第三个参数是path下的文件名,以列表形式返回。
5.文件的open等操作
文件操作:
os.mknod("test.txt") 创建空文件
fp = open("test.txt",w) 直接打开一个文件,如果文件不存在则创建文件
关于open 模式:
w 以写方式打开,
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ )
fp.read([size]) #size为读取的长度,以byte为单位
fp.readline([size]) #读一行,如果定义了size,有可能返回的只是一行的一部分
fp.readlines([size]) #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
fp.write(str) #把str写到文件中,write()并不会在str后加上一个换行符
fp.writelines(seq) #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。
fp.close() #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。 如果一个文件在关闭后还对其进行操作会产生ValueError
fp.flush() #把缓冲区的内容写入硬盘
fp.fileno() #返回一个长整型的”文件标签“
fp.isatty() #文件是否是一个终端设备文件(unix系统中的)
fp.tell() #返回文件操作标记的当前位置,以文件的开头为原点
fp.next() #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。
fp.seek(offset[,whence]) #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
fp.truncate([size]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
————————————————————————————————————————————————————————
进一步可参考:
os分模块详解:
https://blog.csdn.net/xxlovesht/article/details/80913193
os模块fork、wait、system、exec、popen、exit函数讲解:
https://blog.csdn.net/u011630575/article/details/50917167