python入门《基础知识6--目录与文件基础操作,os模块》

python中,关于目录与文件的操作,往往都是利用这两个模块完成的:os模块,shutil模块。

  • os:operate system(操作系统相关模块),文件的基本处理
  • shutil:文件和目录的复制、移动、删除、压缩、解压等高级处理

目录

 

目录

1.获取系统类型

1.1os.name

1.2更详细的操作系统信息——sys.platform

2.获取系统环境

3.执行系统命令

*4 操作目录及文件

4.1获取当前目录

4.2更改目录

4.3列举目录下的所有文件

4.4 创建及删除空目录

4.5重命名目录或文件

4.6绝对路径和相对路径的关联。

4.7路径分解与组合

4.8返回目录和文件名

4.9判断以及获取文件或者文件夹信息

4.10表现形式参数

4.11加上一个自认为很好用的调用

5.文件的open等操作


 

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

 

发布了34 篇原创文章 · 获赞 1 · 访问量 2619

猜你喜欢

转载自blog.csdn.net/qq_39685968/article/details/97138031