2021-02-04

Python 进阶

第八章 模块与程序包

所谓模块,是指已经写好的python文件,也就是一个".py"文件,模块中包含可执行的程序语句和定义好的函数,数据或类。一般来说,将多个模块组合在一起就形成程序包。如果说模块是一个文件,那么程序包就是一个目录。

1.导入模块

#直接导入
import random
a = random.randint(0,99)
print(a)

items = [1,2,3,4,5]
random.shuffle(items)
print(items)

>>>
69
[4, 1, 3, 5, 2]

#取别名导入
import random as r
print(r.randint(1,100))


#只导入特定的模块

1.From 模块名称 import 函数名称
只导入特定函数,直接输入函数名称就可以调用该函数

2.from 模块名称 import *
导入模块的所有函数

命名空间机制:将模块资源限定在模块的命名空间内避免不同的模块之间发生同名冲突的问题。

变量是拥有匹配对象的名字(标识符)。命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典。

一个 Python 表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。

每个函数都有自己的命名空间。类的方法的作用域规则和通常函数的一样。

Python 会智能地猜测一个变量是局部的还是全局的,它假设任何在函数内赋值的变量都是局部的。

因此,如果要给函数内的全局变量赋值,必须使用 global 语句。

global VarName 的表达式会告诉 Python, VarName 是一个全局变量,这样 Python 就不会在局部命名空间里寻找这个变量了。

例如,我们在全局命名空间里定义一个变量 Money。我们再在函数内给变量 Money 赋值,然后 Python 会假定 Money 是一个局部变量。然而,我们并没有在访问前声明一个局部变量 Money,结果就是会出现一个 UnboundLocalError 的错误。取消 global 语句前的注释符就能解决这个问

编写好的文件与主文件放在同一个文件夹就可以当成模块来使用

在python程序中寻找模块时,会按照sys.path所定义的路径来寻找,默认先从当前工作的文件夹寻找,再从环境变量PYTHONPATH指定的目录或Python的安装路径寻找。

dir()函数

dir() 函数一个排好序的字符串列表,内容是一个模块里定义过的名字。

返回的列表容纳了在一个模块里定义的所有模块,变量和函数。如下一个简单的实例:

# 导入内置math模块
import math
 
content = dir(math)
 
print content;

以上实例输出结果:

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
'sqrt', 'tan', 'tanh']

在这里,特殊字符串变量__name__指向模块的名字,__file__指向该模块的导入文件名。

2.认识Python的__name__属性

Python 的文件都有_name_属性,当Python的.py文件的程序代码直接执行的时候,_name__属性会被设置为“—main—”;如果文件被import,属性就会被定义为.py的文件名。

#查看模块的路径与文件名:使用 __file__ 属性
import string
print(string.__file__)
>>>
C:\Users\wing\AppData\Local\Continuum\anaconda3\lib\string.py

系统相关的信息模块: import sys

sys.argv 是一个 list,包含所有的命令行参数.    
sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输出的文件对象.    
sys.stdin.readline() 从标准输入读一行 sys.stdout.write("a") 屏幕输出a    
sys.exit(exit_code) 退出程序    
sys.modules 是一个dictionary,表示系统中所有可用的module    
sys.platform 得到运行的操作系统环境    
sys.path 是一个list,指明所有查找module,package的路径.  

操作系统相关的调用和操作: import os

os.environ 一个dictionary 包含环境变量的映射关系   
os.environ["HOME"] 可以得到环境变量HOME的值     
os.chdir(dir) 改变当前目录 os.chdir('d:\\outlook')   
注意windows下用到转义     
os.getcwd() 得到当前目录     
os.getegid() 得到有效组id os.getgid() 得到组id     
os.getuid() 得到用户id os.geteuid() 得到有效用户id     
os.setegid os.setegid() os.seteuid() os.setuid()     
os.getgruops() 得到用户组名称列表     
os.getlogin() 得到用户登录名称     
os.getenv 得到环境变量     
os.putenv 设置环境变量     
os.umask 设置umask     
os.system(cmd) 利用系统调用,运行cmd命令   

内置模块(不用import就可以直接使用)常用内置函数:

help(obj) 在线帮助, obj可是任何类型    
callable(obj) 查看一个obj是不是可以像函数一样调用    
repr(obj) 得到obj的表示字符串,可以利用这个字符串eval重建该对象的一个拷贝    
eval_r(str) 表示合法的python表达式,返回这个表达式    
dir(obj) 查看obj的name space中可见的name    
hasattr(obj,name) 查看一个obj的name space中是否有name    
getattr(obj,name) 得到一个obj的name space中的一个name    
setattr(obj,name,value) 为一个obj的name   
space中的一个name指向vale这个object    
delattr(obj,name) 从obj的name space中删除一个name    
vars(obj) 返回一个object的name space。用dictionary表示    
locals() 返回一个局部name space,用dictionary表示    
globals() 返回一个全局name space,用dictionary表示    
type(obj) 查看一个obj的类型    
isinstance(obj,cls) 查看obj是不是cls的instance    
issubclass(subcls,supcls) 查看subcls是不是supcls的子类  

##################    类型转换  ##################

chr(i) 把一个ASCII数值,变成字符    
ord(i) 把一个字符或者unicode字符,变成ASCII数值    
oct(x) 把整数x变成八进制表示的字符串    
hex(x) 把整数x变成十六进制表示的字符串    
str(obj) 得到obj的字符串描述    
list(seq) 把一个sequence转换成一个list    
tuple(seq) 把一个sequence转换成一个tuple    
dict(),dict(list) 转换成一个dictionary    
int(x) 转换成一个integer    
long(x) 转换成一个long interger    
float(x) 转换成一个浮点数    
complex(x) 转换成复数    
max(...) 求最大值    
min(...) 求最小值  

3.第三方程序包

PyPI是 Python Package Index 的缩写,是Python 第三方程序包的集中地。网址

第九章 文件的存取与处理

文件是计算机中数字,数据和信息的集合,是一种存储数据的单位,也是在磁盘驱动器上存储数据的重要形式,这些数据以字节的方式进行存储。

1.认识文件

在程序运行过程中,所有的数据都存储在内存中,一旦程序结束,之前输入的数据就会全部消失。为将这些数据保存,就必须将数据写入文件并存放在非挥发性的存储介质中,例如硬盘。

每个文件都有自己的文件名,文件名分为“主文件名”与“扩展名”,中间以句点“."分隔,”扩展名“的功能在于记录文件的类型。

1.1文件的种类

文件按照存储方式分类可以分为文本文件(text file)与二进制(binary file)文件。

文本文件:文本文件以字符编码的方式进行存储,在Windows操作系统的记事本中,默认以ASCII编码来存储文本文件,每个字符占一字节。

二进制文件所谓二进制文件,就是以二进制格式进行存储的文件,也就是将内存中的数据原封不动的保存到文件中,非常适用于非字符为主的数据。二进制文件的最大优点在于访问速度快,占用空间小以及可随机存取

1.2绝对路径与相对路径

绝对路径:指的是一个绝对的位置,并不会随着当前目录的改变而改变,例如:

C:\Windows\system\

相对路径:相对于当前目录的路径表示法,因此”相对路径“所指向的文件或目录会随着当前目录的不同而改变。

2.文件的读与写

Python在处理文件的读取与写入时都是通过文件对象,因此,无论是进行文件的写入或读取操作,第一项工作就是调用Python的内部函数open()来创建文件对象。所谓文件对象,就是一个提供存取文件的接口,它并非实际的文件。当打开文件之后,必须通过文件对象执行的操作。

# open()函数语法
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)


#  1.如果该文件无法被打开,会抛出 OSError。
#  2.使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法
''''''
file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。
''''''

mode 参数有:

模式描述
t文本模式 (默认)。
x写模式,新建一个文件,如果该文件已存在则会报错。
b二进制模式。
+打开一个文件进行更新(可读可写)。
U通用换行模式(Python 3 不支持)。
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

默认为文本模式,如果要以二进制模式打开,加上 b

file 对象

file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数

序号方法及描述
1file.close()关闭文件。关闭后文件不能再进行读写操作。
2file.flush()刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
3file.fileno()返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
4file.isatty()如果文件连接到一个终端设备返回 True,否则返回 False。
5file.next()**Python 3 中的 File 对象不支持 next() 方法。**返回文件下一行。
6[file.read(size])从文件读取指定的字节数,如果未给定或为负则读取所有。
7[file.readline(size])读取整行,包括 “\n” 字符。
8[file.readlines(sizeint])读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。
9[file.seek(offset, whence])移动文件读取指针到指定位置
10file.tell()返回文件当前位置。
11[file.truncate(size])从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小。
12file.write(str)将字符串写入文件,返回的是写入的字符长度。
13file.writelines(sequence)向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

以读取模式打开文件,当文件不存在时会发生错误,如果以写入模式打开文件,第一次打开该文件,而该文件不存在,这个时候系统就会自动以该名称创建新文件,而不会发生类似于读取模式找不到文件的错误。

#以写入模式打开一个名称为C:\test.txt文件

file1 = open("C:\\test.txt","w")

# 注意
# 调用 open()函数打开文件时,所指定的文件路径必须以转义字符"\\"来表示"\"

file2 = open("C:\\lab\\test.txt"."r")

# 或者采用在绝对路径前面加'r'的方式告知编译程序系统"r"后随的路径字符串是原始字符串。即

file2 = open(r"C:\lab\test.txt"."r")

也就是说,对于文本文件而言,要将数据写入文件中,必须事先调用open()方法创建新文件,再使用文件对象所提供的write()方法将文字写入文件,最后调用close()方法关闭文件。

file1 = '''
   清华也是一所好学校
   '''
#创建新文件,以文本模式写入
fn = open('Tsinghua.txt','wt')
'''
调用open()函数时必须将文件对象赋值给变量fn,以便进行文件的存储,第一个参数是
要创建的文件名,此处创建文本文件,第二个参数mode为wt,即以字符串方式表示“以
文本格式写入”
'''
fn.write(file1)
fn.close()
# 以fn调用close()方法关闭文件,如此才能将位于缓冲区的内容全部写入文件,未使用此方法会让创建文件是空的。
#调用open()打开指定的文本文件
fb = open("Tsinghua.txt","r")
#调用read()方法读取文件的内容
text = fb.read()
#输出字符串变量text的内容
print(text)
#调用close()方法关闭文件
fb.close()
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值