[python基础] 标准库

 os模块-操作系统接口

os模块提供了不少与操作系统相关联的函数。

import os

 

建议使用 "import os" 风格而非 "from os import *"。这样可以保证随操作系统不同而有所变化的 os.open() 不会覆盖内置函数 open()

 

os.sep 可以取代操作系统特定的路径分隔符。windows下为 '\\'

os.name 字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是 'posix'

os.getcwd() 函数得到当前工作目录,即当前Python脚本工作的目录路径

os.getenv() 获取一个环境变量,如果没有返回none

os.putenv(key, value) 设置一个环境变量值

os.listdir(path) 返回指定目录下的所有文件和目录名

os.remove(path) 函数用来删除一个文件

os.system(command) 函数用来运行shell命令

os.linesep 字符串给出当前平台使用的行终止符。例如,Windows使用 '\r\n',Linux使用 '\n' 而Mac使用 '\r'

os.path.split(path)  函数返回一个路径的目录名和文件名

os.path.isfile() 和os.path.isdir()函数分别检验给出的路径是一个文件还是目录

os.path.exists() 函数用来检验给出的路径是否真地存在

 

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

os.mkdir(path) 创建一个目录

os.makedirs(path) 递归的创建目录

os.chdir(dirname) 改变工作目录到dirname    

os.path.getsize(name) 获得文件大小,如果name是目录返回0L

os.path.abspath(name) 获得绝对路径

os.path.normpath(path) 规范path字符串形式

os.path.splitext()  分离文件名与扩展名

os.path.join(path,name) 连接目录与文件名或目录,path需存在

os.path.basename(path) 返回文件名

os.path.dirname(path) 返回文件路径

os.walk(top,topdown=True,onerror=None)  遍历迭代目录

os.rename(src, dst)  重命名file或者directory src到dst 如果dst是一个存在的directory, 将抛出OSError. 在Unix, 如果dst在存且是一个file, 如果用户有权限的话,它将被安静的替换. 操作将会失败在某些Unix 中如果src和dst在不同的文件系统中. 如果成功, 这命名操作将会是一个原子操作 (这是POSIX 需要). 在 Windows上, 如果dst已经存在, 将抛出OSError,即使它是一个文件. 在unix,Windows中有效。

os.renames(old, new) 递归重命名文件夹或者文件。像rename()

 

 

shutil 模块

处理日常的文件和目录管理任务

shutil.copyfile( src, dst) 从源src复制到dst中去。当然前提是目标地址是具备可写权限。抛出的异常信息为IOException. 如果当前的dst已存在的话就会被覆盖掉

shutil.move( src, dst)  移动文件或重命名

shutil.copymode( src, dst) 只是会复制其权限其他的东西是不会被复制的

shutil.copystat( src, dst) 复制权限、最后访问时间、最后修改时间

shutil.copy( src, dst)  复制一个文件到一个文件或一个目录

shutil.copy2( src, dst)  在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西

如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;如果是不在相同的文件系统的话就是做move操作

shutil.copytree( olddir, newdir, True/Flase)

把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接

shutil.rmtree( src ) 递归删除一个目录以及目录内的所有内容

 

 

将当前目录下的所有PY文件复制到backup文件夹下:

# coding=gbk
import shutil
import os

# 列出当前目录下文件,文件夹(列表形式返回)
for file in os.listdir("."):  
    # 拆分文件名与后缀名返回数组,并且提取[1]为后缀名,判断是否为py文件        
    # 是则输出文件名称
    if os.path.splitext(file)[1] == ".py":     
        print(file)      
        # 使用join将文件名称变为backup/filename.py路径       
        # 将file文件拷贝到backup/filename.py内                          
        shutil.copy(file, os.path.join("backup", file)) 

 

glob模块

用它可以查找符合特定规则的文件路径名。跟使用windows下的文件搜索差不多。

查找文件只用到三个匹配符:”*”, “?”, “[]”。

”*”匹配0个或多个字符

”?”匹配单个字符

”[]”匹配指定范围内的字符,如:[0-9]匹配数字。

 

glob.glob

返回所有匹配的文件路径列表。它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径。下面是使用glob.glob的例子:

import glob

#获取指定目录下的所有图片
print glob.glob(r"E:/Picture/*/*.jpg")

#获取上级目录的所有.py文件
print glob.glob(r'../*.py') #相对路径

或者:
>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']

 

glob.iglob

获取一个可编历对象,使用它可以逐个获取匹配的文件路径名。

与glob.glob()的区别是:glob.glob同时获取所有的匹配路径,而glob.iglob一次只获取一个匹配路径。

 

命令行参数

命令行参数以链表形式存储于 sys 模块的 argv 变量

例如在命令行中执行 "python demo.py one two three" 后可以得到以下输出结果:

>>> import sys
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']

 

re模块

re模块为高级字符串处理提供了正则表达式工具。对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案:

>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
如果只需要简单的功能,应该首先考虑字符串方法,因为它们非常简单,易于阅读和调试:
>>> 'tea for too'.replace('too', 'two')
'tea for two'

 

'*'

星号,指定将前面的RE重复0次或者任意多次,而且总是试图尽量多次地匹配。

'+'

加号,指定将前面的RE重复1次或者任意多次,而且总是试图尽量多次地匹配。

'?'

问号,指定将前面的RE重复0次或者1次,如果有的话,也尽量匹配1次。

*?, +?, ??

从前面的描述可以看到'*','+'和'?'都是贪婪的,但这也许并不是我们说要的,所以,可以在后面加个问号,将策略改为非贪婪,只匹配尽量少的RE。示例,体会两者的区别:

>>> re.findall('<(.*)>', '<H1>title</H1>')
['H1>title</H1']
>>> re.findall('<(.*?)>', '<H1>title</H1>')
['H1', '/H1']

 

'.'

点号,在普通模式,它匹配除换行符外的任意一个字符;如果指定了 DOTALL 标记,匹配包括换行符以内的任意一个字符。

'^'

尖尖号,匹配一个字符串的开始,在 MULTILINE 模式下,也将匹配任意一个新行的开始。

'$'

美元符号,匹配一个字符串的结尾或者字符串最后面的换行符,在 MULTILINE 模式下,也匹配任意一行的行尾。也就是说,普通模式下,foo.$去搜索'foo1\nfoo2\n'只会找到'foo2′,但是在 MULTILINE 模式,还能找到 ‘foo1′,而且就用一个 $ 去搜索'foo\n'的话,会找到两个空的匹配:一个是最后的换行符,一个是字符串的结尾,演示:

>>> re.findall('(foo.$)', 'foo1\nfoo2\n')
['foo2']
>>> re.findall('(foo.$)', 'foo1\nfoo2\n', re.MULTILINE)
['foo1', 'foo2']
>>> re.findall('($)', 'foo\n')
['', '']

 

re.match(pattern, string[, flags])

 

如果字符串string的开头和正则表达式pattern匹配的话,返回一个相应的MatchObject的实例,否则返回None

注意:要在字符串的任意位置搜索的话,需要使用上面的search()。

 

re.findall(pattern, string[, flags])

 

以列表的形式返回string里匹配pattern的不重叠的子串。string会被从左到右依次扫描,返回的列表也是从左到右一次匹配到的。如果pattern里含有组的话,那么会返回匹配到的组的列表;如果pattern里有多个组,那么各组会先组成一个元组,然后返回值将是一个元组的列表。

 

re.sub(pattern, repl, string[, count])

 

替换,将string里,匹配pattern的部分,用repl替换掉,最多替换count次(剩余的匹配将不做处理),然后返回替换后的字符串。如果string里没有可以匹配pattern的串,将被原封不动地返回。repl可以是一个字符串,也可以是一个函数(也可以参考我以前的例子)。如果repl是个字符串,则其中的反斜杆会被处理过,比如 \n 会被转成换行符,反斜杆加数字会被替换成相应的组,比如 \6 表示pattern匹配到的第6个组的内容。

 

 

数学:

math模块为浮点运算提供了对底层C函数库的访问:

random模块提供了生成随机数的工具。

 

访问 互联网

有几个模块用于访问互联网以及处理网络通信协议。其中最简单的两个是用于处理从 urls 接收的数据的 urllib.request 以及用于发送电子邮件的 smtplib:

>>> from urllib.request import urlopen
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
...     line = line.decode('utf-8')  # Decoding the binary data to text.
...     if 'EST' in line or 'EDT' in line:  # look for Eastern Time
...         print(line)

 

datetime模块

日期和时间

datetime模块为日期和时间处理同时提供了简单和复杂的方法。

支持日期和时间算法的同时,实现的重点放在更有效的处理和格式化输出。

datetime常用操作

from datetime import date
now = date.today()
print(now)

birthday = date(2017, 3, 20)
age = now - birthday
print(age.days)

now = now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
print(now)

结果:
2017-03-29
9
03-29-17. 29 Mar 2017 is a Wednesday on the 29 day of March.

 

获取昨天日期:

import datetime
def getYesterday(): 
    today=datetime.date.today() 
    oneday=datetime.timedelta(days=1) 
    yesterday=today-oneday  
    return yesterday

# 输出
print(getYesterday())

 

。。

 

 

 

猜你喜欢

转载自uule.iteye.com/blog/2366504