专栏首页中科院渣渣博肆僧一枚通用操作系统服务(四)、os模块

通用操作系统服务(四)、os模块

1、函数列表

序号

方法及描述

1

os.access(path, mode) 检验权限模式

2

os.chdir(path) 改变当前工作目录

3

os.chflags(path, flags) 设置路径的标记为数字标记。

4

os.chmod(path, mode) 更改权限

5

os.chown(path, uid, gid) 更改文件所有者

6

os.chroot(path) 改变当前进程的根目录

7

os.close(fd) 关闭文件描述符 fd

8

os.closerange(fd_low, fd_high) 关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略

9

os.dup(fd) 复制文件描述符 fd

10

os.dup2(fd, fd2) 将一个文件描述符 fd 复制到另一个 fd2

11

os.fchdir(fd) 通过文件描述符改变当前工作目录

12

os.fchmod(fd, mode) 改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。

13

os.fchown(fd, uid, gid) 修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。

14

os.fdatasync(fd) 强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。

15

os.fdopen(fd[, mode[, bufsize]]) 通过文件描述符 fd 创建一个文件对象,并返回这个文件对象

16

os.fpathconf(fd, name) 返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。

17

os.fstat(fd) 返回文件描述符fd的状态,像stat()。

18

os.fstatvfs(fd) 返回包含文件描述符fd的文件的文件系统的信息,像 statvfs()

19

os.fsync(fd) 强制将文件描述符为fd的文件写入硬盘。

20

os.ftruncate(fd, length) 裁剪文件描述符fd对应的文件, 所以它最大不能超过文件大小。

21

os.getcwd() 返回当前工作目录

22

os.getcwdu() 返回一个当前工作目录的Unicode对象

23

os.isatty(fd) 如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False。

24

os.lchflags(path, flags) 设置路径的标记为数字标记,类似 chflags(),但是没有软链接

25

os.lchmod(path, mode) 修改连接文件权限

26

os.lchown(path, uid, gid) 更改文件所有者,类似 chown,但是不追踪链接。

27

os.link(src, dst) 创建硬链接,名为参数 dst,指向参数 src

28

os.listdir(path) 返回path指定的文件夹包含的文件或文件夹的名字的列表。

29

os.lseek(fd, pos, how) 设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算; os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效

30

os.lstat(path) 像stat(),但是没有软链接

31

os.major(device) 从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。

32

os.makedev(major, minor) 以major和minor设备号组成一个原始设备号

33

os.makedirs(path[, mode]) 递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。

34

os.minor(device) 从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )。

35

os.mkdir(path[, mode]) 以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。

36

os.mkfifo(path[, mode]) 创建命名管道,mode 为数字,默认为 0666 (八进制)

37

os.mknod(filename[, mode=0600, device]) 创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。

38

os.open(file, flags[, mode]) 打开一个文件,并且设置需要的打开选项,mode参数是可选的

39

os.openpty() 打开一个新的伪终端对。返回 pty 和 tty的文件描述符。

40

os.pathconf(path, name) 返回相关文件的系统配置信息。

41

os.pipe() 创建一个管道. 返回一对文件描述符(r, w) 分别为读和写

42

os.popen(command[, mode[, bufsize]]) 从一个 command 打开一个管道

43

os.read(fd, n) 从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。

44

os.readlink(path) 返回软链接所指向的文件

45

os.remove(path) 删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。

46

os.removedirs(path) 递归删除目录。

47

os.rename(src, dst) 重命名文件或目录,从 src 到 dst

48

os.renames(old, new) 递归地对目录进行更名,也可以对文件进行更名。

49

os.rmdir(path) 删除path指定的空目录,如果目录非空,则抛出一个OSError异常。

50

os.stat(path) 获取path指定的路径的信息,功能等同于C API中的stat()系统调用。

51

os.stat_float_times([newvalue]) 决定stat_result是否以float对象显示时间戳

52

os.statvfs(path) 获取指定路径的文件系统统计信息

53

os.symlink(src, dst) 创建一个软链接

54

os.tcgetpgrp(fd) 返回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组

55

os.tcsetpgrp(fd, pg) 设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg。

56

os.tempnam([dir[, prefix]]) 返回唯一的路径名用于创建临时文件。

57

os.tmpfile() 返回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。

58

os.tmpnam() 为创建一个临时文件返回一个唯一的路径

59

os.ttyname(fd) 返回一个字符串,它表示与文件描述符fd 关联的终端设备。如果fd 没有与终端设备关联,则引发一个异常。

60

os.unlink(path) 删除文件路径

61

os.utime(path, times) 返回指定的path文件的访问和修改的时间。

62

os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]]) 输出在文件夹中的文件名通过在树中游走,向上或者向下。

63

os.write(fd, str) 写入字符串到文件描述符 fd中. 返回实际写入的字符串长度

64

os.path 模块 获取文件的属性信息。

2、os.path详细列表

方法

说明

os.path.abspath(path)

返回绝对路径

os.path.basename(path)

返回文件名

os.path.commonprefix(list)

返回list(多个路径)中,所有path共有的最长的路径

os.path.dirname(path)

返回文件路径

os.path.exists(path)

如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。

os.path.lexists

路径存在则返回True,路径损坏也返回True

os.path.expanduser(path)

把path中包含的"~"和"~user"转换成用户目录

os.path.expandvars(path)

根据环境变量的值替换path中包含的"$name"和"${name}"

os.path.getatime(path)

返回最近访问时间(浮点型秒数)

os.path.getmtime(path)

返回最近文件修改时间

os.path.getctime(path)

返回文件 path 创建时间

os.path.getsize(path)

返回文件大小,如果文件不存在就返回错误

os.path.isabs(path)

判断是否为绝对路径

os.path.isfile(path)

判断路径是否为文件

os.path.isdir(path)

判断路径是否为目录

os.path.islink(path)

判断路径是否为链接

os.path.ismount(path)

判断路径是否为挂载点

os.path.join(path1[, path2[, ...]])

把目录和文件名合成一个路径

os.path.normcase(path)

转换path的大小写和斜杠

os.path.normpath(path)

规范path字符串形式

os.path.realpath(path)

返回path的真实路径

os.path.relpath(path[, start])

从start开始计算相对路径

os.path.samefile(path1, path2)

判断目录或文件是否相同

os.path.sameopenfile(fp1, fp2)

判断fp1和fp2是否指向同一文件

os.path.samestat(stat1, stat2)

判断stat tuple stat1和stat2是否指向同一个文件

os.path.split(path)

把路径分割成 dirname 和 basename,返回一个元组

os.path.splitdrive(path)

一般用在 windows 下,返回驱动器名和路径组成的元组

os.path.splitext(path)

分割路径,返回路径名和文件扩展名的元组

os.path.splitunc(path)

把路径分割为加载点与文件

os.path.walk(path, visit, arg)

遍历path,进入每个目录都调用visit函数,visit函数必须有3个参数(arg, dirname, names),dirname表示当前目录的目录名,names代表当前目录下的所有文件名,args则为walk的第三个参数

os.path.supports_unicode_filenames

设置是否支持unicode路径名

以下实例演示了 os.path 相关方法的使用:

#!/usr/bin/python # -*- coding: UTF-8 -*-

import os

print( os.path.basename('/root/runoob.txt') ) # 返回文件名

print( os.path.dirname('/root/runoob.txt') ) # 返回目录路径

print( os.path.split('/root/runoob.txt') ) # 分割文件名与路径

print( os.path.join('root','test','runoob.txt') ) # 将目录和文件名合成一个路径


Output:
-------------------------
runoob.txt
/root
('/root', 'runoob.txt')
root/test/runoob.txt
-------------------------

2、使用方法

1、os.path.join()使用方法

os.path.join()函数中可以传入多个路径:

  • 会从第一个以”/”开头的参数开始拼接,之前的参数全部丢弃。
  • 以上一种情况为先。在上一种情况确保情况下,若出现”./”开头的参数,会从”./”开头的参数的上一个参数开始拼接。
  • 整个串有多个以”/”开头的参数,从最后”/”开头的的开始往后拼接,之前的参数全部丢弃。
import os

print("1:",os.path.join('aaaa','/bbbb','ccccc.txt'))

print("2:",os.path.join('/aaaa','/bbbb','/ccccc.txt'))

print("3:",os.path.join('aaaa','./bbb','ccccc.txt'))

输出为

1: /bbbb\ccccc.txt 2: /ccccc.txt 3: aaaa\./bbb\ccccc.txt

2、os.mkdir使用方法

创建目录文件夹

def mkdir(path):
    import os
    path = path.strip()
    path = path.rstrip("\\")
    isExists=os.path.exists(path)
    if not isExists:
        os.makedirs(path)  
        print(path+' 创建成功')
        return True
    else:
        print(path+' 目录已存在')
        return False
mkpath="d:\\qttc\\web\\"
mkdir(mkpath)

输出:

运行两次可以观察到:

3、os.walk使用方法

python中os.walk是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。os.walk的函数声明为:

walk(top, topdown=True, οnerrοr=None, followlinks=False)

参数

  • top 是你所要遍历的目录的地址
  • topdown 为真,则优先遍历top目录,否则优先遍历top的子目录(默认为开启)
  • onerror 需要一个 callable 对象,当walk需要异常时,会调用
  • followlinks 如果为真,则会遍历目录下的快捷方式(linux 下是 symbolic link)实际所指的目录(默认关闭)

os.walk 的返回值是一个生成器(generator),也就是说我们需要不断的遍历它,来获得所有的内容。

每次遍历的对象都是返回的是一个三元组(root,dirs,files)

  • root 所指的是当前正在遍历的这个文件夹的本身的地址
  • dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
  • files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)

如果topdown参数为真,walk 会遍历top文件夹,与top文件夹中每一个子目录。

如果我们有如下的文件结构:

      a ->   b   ->   1.txt,  2.txt
             c   ->   3.txt
             d   ->   
           4.txt
           5.txt
for (root, dirs, files) in os.walk('a'):
    #第一次运行时,当前遍历目录为 a
    所以 root == 'a'
         dirs == [ 'b', 'c', 'd']
         files == [ '4.txt', '5.txt']
    
    。。。

    # 接着遍历 dirs 中的每一个目录
    b:  root  = 'a\\b'
        dirs  = []
        files = [ '1.txt', '2.txt']
    
    # dirs为空,返回
    # 遍历c
    c:  root  = 'a\\c'
        dirs  = []
        files = [ '3.txt' ]
    
    PS : 如果想获取文件的全路径,只需要 
    for f in files:
        path = os.path.join(root,f)
    
    # 遍历d
    d:  root  = 'a\\b'
        dirs  = []
        files = []

    遍历完毕,退出循环

4、更改文件后缀名

保持目录 a 的目录结构,在 b 中创建对应的文件夹,并把a中所有的文件加上后缀 _bak

import os

Root = 'a'
Dest = 'b'

for (root, dirs, files) in os.walk(Root):
    new_root = root.replace(Root, Dest, 1)
    if not os.path.exists(new_root):
        os.mkdir(new_root)
    
    for d in dirs:
        d = os.path.join(new_root, d)
        if not os.path.exists(d):
            os.mkdir(d)
    
    for f in files:
        # 把文件名分解为文件名.扩展名
        # 在这里可以添加一个 filter,过滤掉不想复制的文件类型,或者文件名
        (shotname, extension) = os.path.splitext(f)
        # 原文件的路径
        old_path = os.path.join(root, f)
        new_name = shotname + '_bak' + extension
        # 新文件的路径
        new_path = os.path.join(new_root, new_name)
        try:
            # 复制文件
            open(new_path, 'wb').write(open(old_path, 'rb').read())
        except IOError as e:
            print(e)

5、去掉文件返回目录

语法:os.path.dirname(path) 功能:去掉文件名,返回目录 如:

print(os.path.dirname("E:/Read_File/read_yaml.py"))
#结果:
E:/Read_File
print(os.path.dirname("E:/Read_File"))
#结果:
E:/
print(__file__)
#结果
E:/Read_File/read_yaml.py

可以看出__file__表示了当前文件的path

那么就可以了解到os.path.dirname((__file__)和os.path.dirname(“E:/Read_File/read_yaml.py”)是一个意思,再根据os.path.dirname(path)的用法,得出os.path.dirname((__file__)就是得到当前文件的绝对路径

print(os.path.dirname(__file__))
#结果:
E:/Read_File

6、创建递归目录

概述

  • os.makedirs() 方法用于递归创建目录。像 mkdir(), 但创建的所有intermediate-level文件夹需要包含子目录。

语法

makedirs()方法语法格式如下:

os.makedirs(path, mode=0o777)

参数:

  • path -- 需要递归创建的目录。
  • mode -- 权限模式。

返回值:

  • 该方法没有返回值。

实例:

以下实例演示了 makedirs() 方法的使用:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os, sys

# 创建的目录
path = "/tmp/home/monthly/daily"

os.makedirs( path, 0755 );

print "路径被创建"

执行以上程序输出结果为:

路径被创建

7、 os.environ and os.putenv的区别与联系

一、设置系统环境变量

  1. os.environ['环境变量名称']='环境变量值' #其中key和value均为string类型
  2. os.putenv('环境变量名称', '环境变量值')

二、获取系统环境变量

  1. os.environ['环境变量名称']
  2. os.getenv('环境变量名称')

以上方法,推荐用os.environ,因为使用os.putenv()并不会真正改变os.environ字典里面的环境变量,即某些平台无效,但是使用os.environ有一个潜在的隐患:在一些平台上,包括FreeBSD和Mac OS X,修改environ会导致内存泄露。详情见Python API。

我们设置的环境变量只存在于当前的python shell中(设置成功后用print os.environ['环境变量名称']或printos.getenv('环境变量名称') 查看)。也就是说,比如Windows环境下,在"我的电脑"——“属性”——“高级系统设置”——"高级"——"环境变量"中找不到刚才设置成功的环境变量。为什么会这样呢,如何用Python真正设置环境变量?

如果你所在的开发环境是windows的操作系统,import _winreg模块将环境变量写入注册表,再广播WM_SETTINGCHANGE消息,可参考实例;如果你所在的开发环境是Linux的操作系统,使用linux命令,在bash_profile文件中添加环境变量后,使其生效即可。

字段解释:

windows:

  • os.environ[‘HOMEPATH’]:当前用户主目录。
  • os.environ[‘TEMP‘]:临时目录路径。
  • os.environ[PATHEXT’]:可执行文件。
  • os.environ[‘SYSTEMROOT‘]:系统主目录。
  • os.environ[‘LOGONSERVER’]:机器名。
  • os.environ[‘PROMPT’]:设置提示符。

linux:

  • os.environ[‘USER‘]:当前使用用户。
  • os.environ[‘LC_COLLATE’]:路径扩展的结果排序时的字母顺序。
  • os.environ[‘SHELL’]:使用shell的类型。
  • os.environ[‘LAN’]:使用的语言。
  • os.environ[‘SSH_AUTH_SOCK‘]:ssh的执行路径。

8、os.path.abspath和os.path.realpath区别

1、os.path.abspath()

返回一个目录的绝对路径

>>> os.path.abspath("/etc/sysconfig/selinux")
'/etc/sysconfig/selinux'
>>> os.getcwd()
'/root'
>>> os.path.abspath("python_modu")
'/root/python_modu'

2、os.path.realpath()

>>> os.path.realpath("/etc/sysconfig/selinux")
'/etc/selinux/config'
>>> os.path.realpath("/usr/bin/python")
'/usr/bin/python2.7'

9、os.listdir()

概述

os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序。 它不包括 '.' 和'..' 即使它在文件夹中。只支持在 Unix, Windows 下使用。

语法

listdir()方法语法格式如下:

os.listdir(path)

参数

  • path -- 需要列出的目录路径

返回值

  • 返回指定路径下的文件和文件夹列表。

实例

以下实例演示了 listdir() 方法的使用:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os, sys

# 打开文件
path = "/var/www/html/"
dirs = os.listdir( path )

# 输出所有文件和文件夹
for file in dirs:
   print file

Output:
---------------------------------
test.htm
stamp
faq.htm
_vti_txt
robots.txt
itemlisting
resumelisting
writing_effective_resume.htm
advertisebusiness.htm
papers
resume
---------------------------------

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python---爬取英雄联盟皮肤图片

    爬LOL的皮肤高清图片的大致步骤就是用selenium去爬取英雄联盟所以英雄的皮肤的url地址,然后在用requests库去将图片下载到本地。

    sjw1998
  • isa详解(一)isa结构

    为什么要用union以及位运算呢。因为在计算机中为二进制。位运算是最快速的计算方式 union C++ 中的共用体。顾名思义 就是在union 中 公用一个内存...

    老沙
  • Jupyter Notebook导出包含中文的pdf

    Jupyter Notebook是很好的数据科学创作环境。Jupyter提供导出的格式有 .py、.html、.md、.pdf等。目前用其导出包含中文的pdf会...

    蛰虫始航
  • 爬过这些网站才算会爬虫

    网络上有形形色色的网站,不同类型的网站爬虫策略不同,难易程度也不一样。从是否需要登陆这方面来说,一些简单网站不需要登陆就可以爬,比如之前爬过的猫眼电影、东方财富...

    数据森麟
  • 能否让JS作为打开网页的入口?

    意思是,让JavaScript文件作为一个合法的网页入口(而不是html文件)。话题地址在这:

    Jean
  • 实用流量数据分析指南

    粽子节了嘛,突然想吃粽子了,咋办,买粽子呗!现在情景转换一下,假设你是某饮食网的数据分析师,现在某粽子界大亨想拿钱砸你老板(打广告)。

    数据森麟
  • 【CSS】CSS特效集锦,视觉魔法的碰撞与融合(一)

    在本文中我讲述了7种CSS的特效,它们也许看起来并不惊艳,但是我认为却足够传达本文的理念:编写一些特殊的CSS样式的时候需要不拘于常理,要用特殊的认识角度看待标...

    外婆的彭湖湾
  • Java虚拟机详解(七)------虚拟机监控和分析工具(1)——命令行

      通过前面的几篇博客,我们介绍了Java虚拟机的内存分配以及内存回收等理论知识,了解这些知识对于我们在实际生产环境中提高系统的运行效率是有很大的帮助的。但是话...

    IT可乐
  • Jupyter Notebook如何导出包含中文的 PDF?

    Jupyter Notebook是很好的数据科学创作环境。Jupyter提供导出的格式有 .py、.html、.md、.pdf等。目前用其导出包含中文的pdf会...

    张俊红
  • 数据解析

    出 处:https://www.cnblogs.com/guokaifeng/

    郭大侠

扫码关注云+社区

领取腾讯云代金券