python内置模块sys_python 内置模块os 和 sys

Python中大多数系统级接口都集中在两个模块: sys和os———《Programming Python》

一、OS模块

用于提供系统级别的操作。

OS

目录和文件

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径

os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd

os.curdir 返回当前目录: ('.')

os.pardir 获取当前目录的父目录字符串名:('..')

os.makedirs('dirname1/dirname2') 可生成多层递归目录

os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推

os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname

os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname

os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

os.remove() 删除一个文件

os.rename("oldname","newname") 重命名文件/目录

os.stat('path/filename') 获取文件/目录信息

路径相关

os.path.abspath(path) 返回path规范化的绝对路径

os.path.split(path) 将path分割成目录和文件名二元组返回

os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素

os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素

os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False

os.path.isabs(path) 如果path是绝对路径,返回True

os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False

os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False

os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间

os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间

系统相关

os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"

os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"

os.pathsep 输出用于分割文件路径的字符串

os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'

os.system("bash command") 运行shell命令,直接显示

os.environ 获取系统环境变量

1.

os.path.isdir,

os.path.isfile,

os.exists,

os.path.getsize

顾名思义,这是用来查看路径/文件是否存在的,getsize可以获取文件大小(kb)

>>> importos>>> os.path.isdir(r'F:\python程序') #如果path是一个存在的目录,则返回True。否则返回False

True>>> os.path.getsize(r'F:\python程序')#返回文件夹"F:\python程序"的大小

12288

>>> os.path.exists(r'F:\python程序\导入路径研究')#如果path存在,返回True;如果path不存在,返回False

True>>> os.path.isfile(r'F:\python程序\导入路径研究\test.py')#如果path是一个存在的文件,返回True。否则返回False

True>>>

os.path.split

os.path.join

os.path.dirname

os.path.basename

这些方法主要是对一个路径进行具体处理,默认按照dirname, basename的方式进行分解或组合

>>> os.path.split(r'F:\python程序\导入路径研究\test.py')#将path分割成目录和文件名二元组返回

('F:\\python程序\\导入路径研究', 'test.py')>>> a=os.path.split(r'F:\python程序\导入路径研究\test.py')>>> print(a)

('F:\\python程序\\导入路径研究', 'test.py')>>> os.path.join(*a) #将多个路径组合后返回'F:\\python程序\\导入路径研究\\test.py'

>>> file_loc=r'F:\python程序\导入路径研究\test.py'

>>>os.path.dirname(file_loc)#返回path的目录。'F:\\python程序\\导入路径研究'

>>>os.path.basename(file_loc)#返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。'test.py'

可以看出:os.path.split与os.path.join是正好相反的功能,一个是分割,一个是组合

>>> pathname=r'F:\python程序\导入路径研究\test.py'

>>>pathname.split(os.sep)

['F:', 'python程序', '导入路径研究', 'test.py']>>>os.sep.join(pathname.split(os.sep))'F:\\python程序\\导入路径研究\\test.py'

############os.sep的用法###########

python是跨平台的。在Windows上,文件的路径分隔符是'\',在Linux上是'/'。

为了让代码在不同的平台上都能运行,那么路径应该写'\'还是'/'呢?

使用os.sep的话,就不用考虑这个了,os.sep根据你所处的平台,自动采用相应的分隔符号。

3.注意os模块下的os.path.normpath也很好用,可以用来规范一个路径

>>> os.path.normpath('F:\python程序\导入路径研究\test.py')'F:\\python程序\\导入路径研究\test.py'

4.os.path.abspath根据传入的相对/绝对路径返回对应的绝对路径

1 importos2

3 print(os.path.abspath(".")) #当前目录的绝对路径

4 print(os.path.abspath(r"."))5

6 print(os.path.abspath(".."))7 print(os.path.abspath(r"..")) #上级目录的绝对路径

8

9

10 print(os.path.abspath(r"F:/python程序/导入路径研究/abspath功能.py"))11 print(os.path.abspath(r"F:/python程序/导入路径研究/abspath功能.py"))

从输出结果看不出参数"r"的功能

二、SYS模块

用于提供对解释器相关的操作

sys.argv 命令行参数List,第一个元素是程序本身路径

sys.exit(n) 退出程序,正常退出时exit(0),异常为exit(1)

sys.version 获取Python解释程序的版本信息

sys.maxint 最大的Int值

sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

sys.platform 返回操作系统平台名称

sys.stdout.write('please:')

val = sys.stdin.readline()[:-1]

1.相对路径和绝对路径

绝对路径就是文件的真正存储的路径,如:C:\Users\lenovo\Desktop

相对路径就是以当前文件为基准一级级目录指向被引用的资源文件。

以下是常用的表示当前目录和当前目录的父级目录的标识符

../ 表示当前文件所在的目录的上一级目录./ 表示当前文件所在的目录(可以省略)/ 表示当前站点的根目录(域名映射的硬盘目录)

1 importos2 path1=os.path.abspath('.') #表示当前所处的文件夹的绝对路径

3 print(path1)4 path2=os.path.abspath('..') #表示当前所处的文件夹上一级文件夹的绝对路径

5 print(path2)

结果如下:

>>>

==================== RESTART: F:/python程序/导入路径研究/listdir.py ===================F:\python程序\导入路径研究

F:\python程序>>>

2.Python sys.path的使用

sys.path模块是动态的修改系统路径

因为模块要处于Python搜索路径中的目录里才能被导入,(但我们不喜欢维护一个永久性的大目录,因为其他所有的Python脚本和应用程序导入模块的时候性能都会被拖累。)因此当某一目录存在而且此前不在sys.path时,我们可以用sys.path动态地在路径中添加一个"目录"。

sys.path是个列表,所以在末尾添加目录是很容易的,用sys.path.append就行了。当这个append执行完之后,新目录即时起效,以后的每次import操作都可能会检查这个目录。当然我们也可以选择用sys.path.insert(0,…,这样新添加的目录会优先于其他目录被import检查。

sys.path.append(‘你的模块路径名称’)。

sys.path.insert(0,’模块的名称’)

添加相关的路径,但在退出python环境后自己添加的路径就会自动消失!

1 importsys2 sys.path.append('F:\python程序\导入路径研究') #sys.path是个列表,用sys.path.append可以在末尾添加目录。

1 importsys2 sys.path.insert(0,'F:\python程序\导入路径研究')#用sys.path.insert新添加的目录会优先于其他目录被import检查到。

3.python 在不同层级目录import 模块的方法

有一个文件夹/home/a, 里面有个模块叫b.py, 我怎么把他import到程序里?

方法一:

import sys;

sys.path.append(“/home/a/”)

import b

方法二:

在目录里面增加__init__.py文件,里面可以写import时执行的代码,当然也可以留空就可以.

import home.a.b

方法三:

from home.a.b import *

前提 home、a中都包括__init__.py 即:要导入的文件的当前目录和父目录都要有init.py文件

Python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。

下面将具体介绍几种常用情况:

(1)主程序与模块程序在同一目录下:

如下面程序结构:

– src

|– mod1.py

|– test1.py

若在程序test1.py中导入模块mod1, 则直接使用import mod1或from mod1 import *;

(2)主程序所在目录是模块所在目录的父(或祖辈)目录

如下面程序结构:

– src

|– mod1.py

|– mod2

| – mod2.py

– test1.py

若在程序test1.py中导入模块mod2, 需要在mod2文件夹中建立空文件__init__.py文件(也可以在该文件中自定义输出模块接口); 然后使用 from mod2.mod2 import * 或import mod2.mod2.

(3)主程序导入上层目录中模块或其他目录(平级)下的模块

如下面程序结构:

– src

|– mod1.py

|– mod2

|– mod2.py

|– sub

| – test2.py

– test1.py

若在程序test2.py中导入模块mod1.py和mod2.py。首先需要在mod2下建立__init__.py文件(同(2)),src下不必建立该文件。然后调用方式如下:

下面程序执行方式均在程序文件所在目录下执行,如test2.py是在cd sub;之后执行python test2.py

而test1.py是在cd src;之后执行python test1.py; 不保证在src目录下执行python sub/test2.py成功。

import sys

sys.path.append(“..”)

import mod1

import mod2.mod2

总结:

当要导入的文件和当前文件在同一个目录时,可以直接导入这个文件。

当要导入的文件或者目录和当前文件不在同一目录时,需要先跳到要导入文件的父级目录(即将父级目录加入系统路径),然后一级一级的用点号连接走过的目录或者文件,直到到达要导入的模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值