Python(五)–模块与文件操作
模块和包
模块
模块是包含Python定义和语句的文件,把一组相关函数或代码组织到一个文件中,一个文件即一个模块.模块的文件名 = 模块名+后缀.py 模块之间代码共享,可以相互调用,实现代码重用.
- 模块的导入
import 模块名 #导入一个模块
import 模块名1[,模块名2][,模块名3] #导入多个模块
模块和变量一样也有作用域的区别,如果在模块的顶层导入,则作用域是全局的;如果在函数中导入,则作用域是局部的.一个模块只能被加载一次,无论它被导入多少次,这样可以阻止多重导入时,代码被多次执行.在实际编码时,推荐直接在顶层导入.
导入的模块也分几种,有Python的标准库模块,第三方模块和应用程序自定义的模块.如果是第一次导入,模块将被加载并执行,加载执行时在搜索路径中找到指定的模块,之后再调用时就不需要再次加载了.
示例:
import sys
print sys.platform
当引用模块里面的函数时,就要使用”模块名.函数名”引用.
如果不使用模块名,而直接用函数名进行调用,就需要在导入时指定需要使用的模块的属性.
from 模块名 import 属性名
from 模块名 import (属性名1)[,属性名2][,属性名3]...
还可以使用as关键字为模块属性重新命名.
import 模块名 as 模块新名称
from 模块名 import 属性名 as 属性新名称
包
当程序中的模块非常多时,可以把模块再进行划分,组织成包.包实际上就是一个目录,但必须包含一个__init__.py文件.__init__文件可以是一个空文件,表示当i安目录是一个包.包可以嵌套使用,包中还可以包含其他子包.
包的使用
导入包中的模块只需要在模块名前加上包的名称即可.__init__.py
前面使用的是空__init__.py文件,也可以在里面添加代码,她的作用实际上是初始化包中的公共变量.在第一次使用import导入包中热河部分后,包中的__init__.py文件中的代码就会执行.
常用的模块
模块名称 | 说明 |
---|---|
copy | 复制 |
keyword | 记录关键字 |
random | 获得随机数 |
sys | 空盒子shell程序 |
time | 得到时间 |
- random模块
方法 | 操作 |
---|---|
random() | 生成一个随机浮点数(0.0~1.0) |
uniform([上限],[下限]) | 在设定的范围内产生一个浮点数 |
randint([上限],[下限]) | 随机生成设定范围内的一个整数 |
choice(序列) | 从该序列中选取一个随机的元素返回 |
shuffle(序列) | 随机打乱一个序列中元素的顺序 |
sample(序列,长度) | 从指定的序列中随机截取指定长度的片段,序列本身不作修改 |
示例:
import random
print random.uniform(1, 5)
print random.randint(0, 1)
list1 = ['a','b','c']
print random.choice(list1)
random.shuffle(list1)
print list1
- sys模块
属性/方法 | 操作 |
---|---|
path | 获取模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 |
platform | 获取操作系统平台的名称 |
version | 获取解释器的版本信息 |
maxint | 最大的int值 |
maxunicode | 最大的Unicode值 |
stdin | 读取信息到Shell程序中 |
stdout | 向Sshell程序输出信息 |
Exit() | 退出Shell程序 |
- time模块
各种操作时间的方法.
属性/方法 | 操作 |
---|---|
time() | 获取 |
localtime() | 获取当前时间的元组形式 |
ctime() | 获取当前时间的字符串形式 |
asctime(t) | 将时间转换成字符串,参数t时元组形式的时间 |
sleep(secs) | 按指定的时间推迟运行,参数是推迟的时间,单位是秒 |
文件和目录的操作
文件操作
- 文件的打开和关闭操作
使用open()函数打开文件.
open(filePath,access_mode[,buffering])
access_mode为文件打开模式(默认为r)
模式 | 操作 | 说明 |
---|---|---|
r | 读取 | 文件必须存在 |
w | 写入 | 如果文件存在,会先清空其中数据,在重新创建 |
a | 追加 | 如果文件不存在,现自动创建文件.所有写入的数据都将追加到文件的末尾 |
b | 二进制文件 | 不能作为第一字符出现,打开音视频等二进制文件时,用到b模式 |
注意:打开之后记得close();
- 向文件中写数据
file = open("C:/Users/Administrator/Desktop/test.txt",'w')
file.write("Veng")
file.close()
- 从文件中读取数据
file = open("C:/Users/Administrator/Desktop/test.txt","r")
print file.read(3) #读取多少个字符
file.readline() #读取一行
file.close()
补充:还有其他读写模式(r+,w+,a+);r+表示不清除源文件内容,读写方式打开,而新添的数据在文件尾部;w+表示清除源文件内容,读写方式打开,读不到源文件内容;a+表示吧文件指针移到文件末尾,在文件末尾可以继续些数据,度数据不受影响.
从python2.2开始引进了迭代器和文件迭代.
for line in file:
print line
文件的指针
前面讲到的文件操作时按顺序进行读取的,在Python中实际上是用贺子珍实现的,指针时指向文件中数据的位置.Python提供了移动指针的方法file.seek(offset,whence = 0),相对于whence位置的偏移offset.常用的文件对象的操作方法
方法 | 操作 |
---|---|
open() | 创建并打开文件 |
file.close() | 关闭文件 |
file.fileo() | 返回文件的描述符 |
file.read(size = -1) | 从文件读取size个字节,当size<0时,读取剩余的所有字节,作为字符串返回 |
file.readline(sizhint=0) | 从文件中读取并返回一行(包括行结束符),或返回最大的size个字符 |
file.readlines(sizhint=0) | 读取文件的所有行并作为一个列表返回(包括所有行结束符).如果给定的sizhint且大于0,将返回总和大约为sizhint字节的行 |
file.seek(off,whence = 0) | 相对于whence位置的偏移offset.0代表文件的开始,1代表当前位置,2代表文件末尾 |
file.write(str) | 向文件写入字符串 |
file.writeline(seq) | 向文件写入字符串序列seq |
目录操作
目录操作可以使用Python的OS模块.
- 获取当前路径–getcwd()
import os
print os.getcwd() #获取当前路径
- 获取目录下所有文件的目录列表
print os.listdir(os.getcwd())
- 创建新的目录
os.mkdir("python") #默认目录创建在当前目录下.
- 删除目录
os.rmdir("python") #删除目录
- 判断目录是否存在
print os.path.isdir("python")
- 判断是否时是文件
print os.path.isfile("python")
- walk(path)可以遍历目录中的所有文件和目录中的内容,返回一个可迭代的生成器.
o = os.walk("C:/Users/Administrator/Desktop/")
print [f for f in o]