python笔记--内置模块

python常用内置模块

类似于函数式编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来说,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个.py文件组成的代码集合就称为模块。

模块分为三种:自定义模块、内置模块、开源模块http://pypi.python.org

一、导入模块

方法:

import module
from module.xx.xx import xx
from module.xx.xx import xx as rename  
from module.xx.xx import *

导入模块其实就是告诉Python解释器去解释那个py文件,导入一个py文件,解释器解释该py文件,导入一个包,解释器解释该包下的 __init__.py 文件。

那么问题来了,导入模块时是根据那个路径作为基准来进行的呢?即:sys.path

如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append(‘路径‘) 添加。可以通过os模块获得路径,例如:

import sys
import os
pre_path = os.path.abspath(‘../‘)
sys.path.append(pre_path)

二、第三方模块的下载安装

两种方法:

使用pip工具,具体使用方法,可以参照:

http://blog.csdn.net/olanlanxiari/article/details/48086917

下载源码包,解压后进入解压目录,依次执行:

python setup.py build
python setup.py install

三、内置模块

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.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  获取系统环境变量

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,否则返回False

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

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

os.path.islink(path)  如果path是一个链接目录,返回True,否则返回False

os.path.ismount(path)  如果path挂载了设备,返回True,否则返回False

os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,常用于拼接路径

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

os.path.getctime(path)  返回path所指向的文件或者目录的最后变化时间

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

os.walk(path)  目录生成器返回格式:(dirpath,[dirnames],[filenames]),例如:

>>> import os
>>> for ROOT,DIR,FILE in os.walk(‘/root/test‘):
...     print ROOT
...     print DIR
...     print FILE
... 
/root/test
[‘lala‘]
[‘test.txt‘, ‘001.txt‘, ‘002.py‘]
/root/test/lala
[]
[‘003.txt‘]

#我们可以看一下/root/test的目录结构:
[[email protected] ~]# tree /root/test
/root/test
├── 001.txt
├── 002.py
├── lala
│   └── 003.txt
└── test.txt -> test.txt

1 directory, 4 files


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

sys.argv  命令行参数,结果是个列表,第一个元素是程序名,之后的元素是执行程序携带的参数。例如:

[[email protected] /]# cat /root/test.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys
print sys.argv
print sys.argv[0]
print sys.argv[1]
print sys.argv[2]
[[email protected] /]# python /root/test.py a b c
[‘/root/test.py‘, ‘a‘, ‘b‘, ‘c‘]
/root/test.py   #argv[0]
a               #argv[1]
b               #argv[2]

sys.exit()  执行到sys.exit()时,退出程序,括号中可以加上数字,sys.exit(0)表示正常退出。

sys.version  返回Python解释程序的版本信息

sys.maxint  返回最大的Int值

sys.path  返回模块的搜索路径,以列表的形式,可以追加自定义路径。

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

sys.stdin.readline()  标准输入,例如:

>>> name=sys.stdin.readline()
FJC    #手动输入
>>> print name
FJC

sys.stdout.write(‘内容’)  标准输出

sys.stdout.flush()  配合time.sleep(1)实现实时输出信息,例如:

>>> import sys
>>> import time
>>> for i in range(3):
...    print i,
...    sys.stdout.flush()
...    time.sleep(1)

0 1 2       #每隔一秒输出一个数字

 

shutil,高级的 文件、文件夹、压缩包 处理模块

shutil.copyfileobj(fsrc, fdst[, length])

将文件内容拷贝到另一个文件中,可以部分内容

#注意! 在其中fsrc,fdst都是文件对象,都需要打开后才能进行复制操作,例如:

[[email protected] ~]# cat test1
test1
[[email protected] ~]# cat test2
[[email protected] ~]# python
>>> n=open(‘test1‘,‘r+‘)
>>> m=open(‘test2‘,‘a+‘)
>>> import shutil
>>> shutil.copyfileobj(n,m)
>>> n.close
<built-in method close of file object at 0x7fd57bd165d0>
>>> m.close
<built-in method close of file object at 0x7fd57bd16660>
>>> quit()
[[email protected] ~]# cat test2
test1

shutil.copyfile(src, dst)

仅拷贝文件到文件或目录

shutil.copymode(src, dst)

仅拷贝权限,内容、组、用户均不变

shutil.copystat(src, dst)

拷贝状态的信息,包括:mode bits, atime, mtime, flags

shutil.copy(src, dst)

拷贝文件和权限

shutil.copy2(src, dst)

拷贝文件和状态信息

shutil.ignore_patterns(*patterns)#忽略的参数

shutil.copytree(src, dst, symlinks=True, ignore=None)  #symlinks=True表示原目录中的符号链接文件会被直接复制到目标目录中;symlinks=False表示会将原目录中符号链接文件的正本文件复制到目标目录中。

递归的去拷贝文件,例如:

[[email protected] ~]# tree test
test
├── 001.txt
├── 002.py
└── lala
    └── 003.txt
 
1 directory, 3 files
 
#递归拷贝,注意目标目录不能实现建立,否则会报错
>>> from shutil import *
>>> copytree(‘test‘,‘test1‘,ignore=ignore_patterns(‘*.py‘))
 
[[email protected] ~]# tree test1
test1
├── 001.txt
└── lala
    └── 003.txt
 
1 directory, 2 files

shutil.rmtree(path[, ignore_errors[, onerror]])

递归的去删除文件

shutil.move(src, dst)

递归的去移动文件

python3.0+版本

shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])

创建压缩包并返回文件路径及名称。

base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径。

format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”

root_dir: 要压缩的文件夹路径(默认当前目录)

owner: 用户,默认当前用户

group: 组,默认当前组

logger: 用于记录日志,通常是logging.Logger对象

例如:

>>> os.chdir(‘c:\\‘)
>>> ret=shutil.make_archive(‘www‘,‘zip‘,root_dir=‘c:\\test‘)
>>> ret
‘c:\\www.zip‘
#表示将c:\\test目录下的文件压缩,保存到当前目录,命名为www
 
>>> ret=shutil.make_archive(‘c:\\www\\myfile‘,‘zip‘,root_dir=‘c:\\test‘)
>>> ret
‘c:\\www\\myfile.zip‘
#表示将c:\\test目录下的文件压缩,保存到c:\\www目录下,命名为myfile

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的。

>>> import zipfile
#压缩
>>> z=zipfile.ZipFile(‘test.zip‘,‘w‘)
>>> z.write(‘a.log‘)
>>> z.write(‘b.data‘)
>>> z.close()
# 解压
>>> z = zipfile.ZipFile(‘test.zip‘, ‘r‘)
>>> z.extractall()
>>> z.close()

>>> import tarfile
#压缩
>>> tar=tarfile.open(‘my.tar‘,‘w‘)
>>> tar.add(‘a.log‘,arcname=‘aa.log‘)   #arcname可以改变文件压缩后的名称
>>> tar.add(‘b.data‘,arcname=‘bb.data‘)
>>> tar.close()
#解压
# 解压
>>> tar = tarfile.open(‘your.tar‘,‘r‘)
>>> tar.extractall()   #可设置解压地址
>>> tar.close()

random,用于生成随机数

random.random()

返回随机数,在0和1范围内

random.randint(1,3)

返回随机整数,在1和3范围内,包括1和3

random.randrange(1,10)

返回随机整数,在1和10范围内,不包括10

random.randrange(1,10,2)

末尾的2表示跳数,每隔两个取一个数,起始位置为1,所以这个结果就是1~10之间的随机奇数。

random.sample(array,n)

表示从一个数组中随机取出n个元素,例如:

>>> import random
>>> random.sample([1,2,3,4],1)
[3]

hashlib,提供常见的摘要算法,如:MD5、SHA1等

>>> import hashlib
>>> test=hashlib.md5()
>>> test.update(‘how to use md5 in python hashlib?‘)
>>> print test.hexdigest()
d26a53750bc40b38b65a520292f69306

如果,数据量很大,可以分块多次调用update(),最后的计算结果是一样的。

>>> test2=hashlib.md5()
>>> test2.update(‘how to use md5 ‘)
>>> test2.update(‘in python hashlib?‘)
>>> print test2.hexdigest()
d26a53750bc40b38b65a520292f69306

shelve,简单的数据存储方案

只有一个函数open(),这个函数接收一个参数就是文件名,然后返回一个shelf对象,你可以用他来存储东西,就可以简单的把他当作一个字典,key必须为字符串,而值可以是python所支持的数据。当你存储完毕的时候,就调用close函数来关闭。

>>> import shelve
>>> s=shelve.open(‘test.txt‘)
>>> s[‘x‘]=[1,2,3]
>>> s[‘y‘]=[4,5,6]
>>> s[‘x‘]
[1, 2, 3]
#不过有个小问题,例如:
>>> s[‘x‘].append(4)
>>> s[‘x‘]
[1, 2, 3]

新添加的元素到哪里去了呢?其实,元素4没有写回,你把[1,2,3]存到了x,当你再次读取s[‘x‘]的时候,s[‘x‘]只是一个拷贝,而你没有将拷贝写回,所以当你再次读取s[‘x‘]的时候,它又从源中读取了一个拷贝,所以,你新修改的内容并不会出现在拷贝中,解决的办法就是,利用一个缓存的变量,例如:

>>> temp=s[‘x‘]
>>> temp.append(4)
>>> s[‘x‘]=temp
>>> s[‘x‘]
[1, 2, 3, 4]

time,时间访问和转换

time.time()  返回当前时间的时间戳(1970纪元后经过的浮点秒数)。

time.localtime([时间戳])  转换时间戳为一个时间元组,没有参数是指当前时间。例如:

>>> a=time.localtime()
>>> type(a)
<type ‘time.struct_time‘>
>>> a
time.struct_time(tm_year=2017, tm_mon=5, tm_mday=23, tm_hour=18, tm_min=11, tm_sec=30, tm_wday=1, tm_yday=143, tm_isdst=0)

time.asctime([tuple])  转换时间元组为一个可读性好的格式,没有参数是指当前时间。例如:

>>> time.asctime(time.localtime())
‘Tue May 23 18:26:25 2017‘

time.ctime(时间戳)  转换时间戳为一个可读性好的格式,没有参数是指当前时间。例如:

>>> time.ctime(time.time())
‘Tue May 23 18:28:46 2017‘

time.sleep(seconds)  按照给定的秒数延迟执行,参数可以是整数或浮点数。

time.strftime(format[,tuple]) 将元组时间转换成指定格式,没有tuple是定当前时间。例如:

>>> time.strftime(‘%Y-%m-%d %H:%M:%S‘)
‘2017-05-23 18:39:44‘
>>> time.strftime(‘%Y-%m-%d %H:%M:%S‘,time.localtime(12345))
‘1970-01-01 11:25:45‘

re,正则表达式

re.match(pattern, string)  仅从字符串头开始匹配,例如:

>>> re.match(‘abc‘,‘1abc2abc‘)#没有结果
>>> a=re.match(‘abc‘,‘abc1abc2abc‘)
>>> a.group()
‘abc‘

re.search(pattern, string)  匹配整个字符串,直到找到一个匹配,例如:

>>> b=re.search(‘abc‘,‘1abc2abc‘)
>>> b.group()
‘abc‘

re.findall(pattern, string)   找到所有要匹配的字符并返回列表格式,例如:

>>> re.findall(‘abc‘,‘1abc2abc‘)#注意返回结果是一个列表
[‘abc‘, ‘abc‘]

re.complie(string)  生成要匹配的正则对象,例如:

>>> c=re.compile(‘abc‘)#参数可以是各种正则表达式,提前编译。
>>> d=c.match(‘abc1abc2abc‘)#匹配时直接调用,提高了性能。
>>> d.group()
‘abc‘

re.sub(pattern, repl, string, count,flag)  替换匹配到的字符,即对字符串string按照pattern匹配,得到的替换为repl,替换个数为count,flag表示匹配模式,例如:

>>> re.sub("[0-9]","|", "aaa1bbb2ccc3ddd4eee",count=2 )
‘aaa|bbb|ccc3ddd4eee‘
>>> re.sub("[0-9]","|", "aaa1bbb2ccc3ddd4eee")   #不指定count表示替换所有匹配的
‘aaa|bbb|ccc|ddd|eee‘

flag的类型:

1).re.I(re.IGNORECASE): 忽略大小写 
2).re.M(MULTILINE): 多行模式,改变’^’和’$’的行为 
3).re.S(DOTALL): 点任意匹配模式,改变’.’的行为 
4).re.L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定 
5).re.U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性 
6).re.X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。

注:

正则表达式实例:

字符匹配

python 匹配 "python".

字符类

[Pp]ython 匹配 "Python" 或 "python"

rub[ye] 匹配 "ruby" 或 "rube"

[aeiou] 匹配中括号内的任意一个字母

[0-9] 匹配任何数字。类似于 [0123456789]

[a-z] 匹配任何小写字母

[A-Z] 匹配任何大写字母

[a-zA-Z0-9] 匹配任何字母及数字

[^aeiou] 除了aeiou字母以外的所有字符

[^0-9] 匹配除了数字外的字符

特殊字符类

. 匹配除 "\n" 之外的任何单个字符。要匹配包括 ‘\n‘ 在内的任何字符,请使用象 ‘[.\n]‘ 的模式。

\d 匹配一个数字字符。等价于 [0-9]。

\D 匹配一个非数字字符。等价于 [^0-9]。

\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

\w 匹配包括下划线的任何单词字符。等价于‘[A-Za-z0-9_]‘。

\W 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]‘。

参考练习:

1.批量改名:

目录下abc_001.txt

abc_002.txt

abc_003.txt

abc_004.txt

abc_005.txt

改名为:001.txt

002.txt

003.txt

004.txt

005.txt

#!/usr/bin/env python
import os
for x,y,z in os.walk("."):
	for i in z:
		a="".join(list(i)[4:])
		os.rename(i,a)

2.随机生成6个包含大写字母、小写字母、数字的字符串:

#!/usr/bin/env python
a=range(65,91)
b=range(97,123)
c=range(48,58)
a.extend(b)
a.extend(c)
import random
c=[]
for i in range(6):
    d=chr (random.sample(a,1)[0])
    c.append(d)
print "".join(c)
时间: 2024-10-17 12:19:16

python笔记--内置模块的相关文章

python笔记--内置模块之logging

logging模块                                                                                                                            顾名思义,用于程序日志输出,可以设置日志级别.格式.输出方式等,基本使用方法如下: 1.logging.basicConfig方式 简单的配置,只能选择单独输出到屏幕或输出到文件,不能同时输出.例如: #-*- coding:utf-

Python笔记_01列表 和元祖

Python笔记 第一章 列表和元祖 1.通用序列操作 所有序列都可以进行某些特定操作,包括:索引(indexing).分片(slicing).加(adding).乘(multiplying)以及检查某元素是否属于列表成员. 迭代:依次对序列中的每个元素重复执行某些操作. 序列的索引:通过元素在列表中的位置可以定位到该元素,这就是列表的索引,使用类似于list[0]对元素进行索引,索引0指向第一个元素.也可使用负数对元素进行索引,使用负数对元素索引时,列表中的最后一个元素由-1表示,例如list

玩蛇(Python)笔记之基础Part3

玩蛇(Python)笔记之基础Part1 一.集合 1.set 无序,不重复序列 {}创建,直接写元素 2.set功能 __init__()构造方法,,使用强制转换就会调用此方法 1 set1 = {'year', 'jiujiujiu'} 2 print(type(set1)) 3 # 创建集合 4 s = set() # 创建空集合 5 li = [11, 22, 11, 22] 6 s = set(li) set 3.集合的基本操作 1 # 操作集合 2 s1 = set() 3 s1.a

Python笔记(四)

在<Python笔记(三)>中,我记录关于Python中序列问题的知识.个人觉得确实比Java中的集合框架简单.之前也说了,Python是一种高级面向对象的语言,它的每一个变量都称为对象.今天我接触了面向对象的编程.下面是这篇博客的目录: 1.类与对象 2.输入输出 3.异常 类与对象: 我们都知道面向对象的语言具备四个特性:抽象,继承,封装,多态.Java,C++是这样,Python也不例外.在Python中,我们定义一个类,使用关键字class.形式如下:class classname:.

python笔记 - day7-1 之面向对象编程

python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: sele是什么? self是一个python自动会给传值得参数: 哪个对象执行方法,self就是哪个对象: 构造方法: 类中有一个特殊的方法,__init__,类()自动执行: 面向对象,三大特性: 封装,继承,多态:  

Python笔记之不可不练

如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知>中,尽管本文是自己学习Python过程中的总结,在大神看来,或许略欠火候,希望批评指正,万分感谢! 本文是作者学习成绩的见证,请尊重劳动成果!版权归作者和博客园共有,欢迎转载,但请保留本文出处http://www.cnblogs.com/itred/p/4687287.html ,  作者:itRed

python笔记之列表和元组

pyhton的列表和元组,说白了其实就是一种数据结构,只是在python当中更加方便的去操作而已.. 1.序列 其实字符串就是采取序列的方式的: string = "hello" print string[0] 结果为:h 对比其他编程语言,python还有一个负值索引的概念: 序列的分片: first = [0,1,2,3,4,5,6,7,9] print first[1:6:2] 针对first[1:6:2]这条语句: 1代表的起始索引,不写,默认为0 6代表结束索引,不写默认为所

整理python笔记

1.python笔记:while.if.for.编码 2.  模拟登陆 3.  python笔记:字符.列表.字典.元祖.数据类型

玩蛇(Python)笔记之基础Part2

玩蛇(Python)笔记之基础Part2 一.列表 1.列表 别的语言叫数组 python牛逼非要取个不一样的名字 1 age = 23 2 name = ["biubiubiu", "jiujiujiu", 22, age] 3 # namecopy = name 4 # namecopy.pop() 5 print(name) 6 # print(namecopy) List 2.列表取值 正常index 从零开始,,取倒数加负号 倒数第一就是[-1] 3.列表