1、sys模块
- sys.argv 实现从程序外部向程序传递参数。
sys.argv变量是一个包含了命令行参数的字符串列表,利用命令行向程序传递参数,脚本的名称总是sys.argv列表的第一个参数。 - sys.path包含输入模块的目录名列表。
- sys.exit(0)正常退出。
一般执行到主程序的末尾,解释器自动退出,但如果需要中途退出程序,可以调用sys.exit()。 - sys.modules
是一个全局字典,该字典是python启动后就加载在内存中,每当导入一个新的模块,sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,加快程序运行速度。它有字典的一切方法。 - sys.getdefaultencoding()/sys.setdefaultencoding()/sys.getfilesystemencoding()
sys.getdefaultencoding()
获取系统当前编码,一般默认为ASCII。
sys.getfilesystemencoding()
获取文件系统使用的编码方式。 - sys.stdin/sys.stdout/sys.stderr
标准输入输出流。 - sys.platform
获取当前系统平台。 - sys.version
获取当前python版本。
2、os
见Python基础。
3、CSV文件和csv模块
标准库中有自带的csv(逗号分隔值)模块处理csv格式的文件
3.1、读 csv文件
csv.reader(fp)
with open(path) as fp:
r=csv.reader(fp)
for row in r :
...
...
3.2、写 csv文件
csv.writer(fp)
如果出现空行现象,在open里添加参数newline=''
import csv
#csv文件,是一种常用的文本格式,用以存储表格数据,很多程序在处理数据时会遇到csv格式文件
files=open('test.csv','w')
writer=csv.writer(files)
writer.writerow(['id','url','key'])#写入一行
data=[(1,'http://www.baidu.com','百度'),(2,'http://www.163.com','网易')]
#一次写入多行
writer.writerows(data)
files.close()
4、正则表达式和re模块
见python基础。
5、datetime模块
提供基础时间和日期处理
datetime 格式字符表
字符 含义
%a 星期英文缩写
%A 星期英文
%w 一星期的第几天,[0(sun),6]
%b 月份英文缩写
%B 月份英文
%d 日期,[01,31]
%H 小时,[00,23]
%I 小时,[01,12]
%j 一年的第几天,[001,366]
%m 月份,[01,12]
%M 分钟,[00,59]
%p AM 和 PM
%S 秒钟,[00,61] (大概是有闰秒的存在)
%U 一年中的第几个星期,星期日为第一天,[00,53]
%W 一年中的第几个星期,星期一为第一天,[00,53]
%y 没有世纪的年份
%Y 完整的年份
5.1、date 对象
import datetime as dt
d1 = dt.date(2007, 9, 25)
d2 = dt.date(2008, 9, 25)
print d1
print (d1.strftime('%A, %m/%d/%y'))
print (d1.strftime('%a, %m-%d-%Y'))
07-09-25
Tuesday, 09/25/07
Tue, 09-25-2007t
查看今天的日期
datetime.date.today()
5.2、time对象
t1 = dt.time(15, 38)
t2 = dt.time(18)
print t1
print t1.strftime('%I:%M, %p')
print t1.strftime('%H:%M:%S, %p')
15:38:00
03:38, PM
15:38:00, PM
5.3、datetime对象
#获得当前时间
d1 = dt.datetime.now()
print d1
2015-09-10 20:58:50.148000
#给当前的时间加上 30 天,timedelta 的参数是 timedelta(day, hr, min, sec, us)
d2 = d1 + dt.timedelta(30)
print d2
2015-10-10 20:58:50.148000
#除此之外,我们还可以通过一些指定格式的字符串来创建 datetime 对象:
print dt.datetime.strptime('2/10/01', '%m/%d/%y')
2001-02-10 00:00:00
6、SQL数据库
?
7、函数进阶:参数传递,高阶函数,lambda匿名函数,global变量,递归
7.1、函数参数
默认参数可变,默认参数的绑定发生在函数定义的时候,以后每次调用默认参数时都会使用同一个引用。
def f(x = []):
x.append(1)
return x
print f()
print f()
print f()
print f(x = [9,9,9])
print f()
print f()
>>> [1]
[1, 1]
[1, 1, 1]
[9, 9, 9, 1]
[1, 1, 1, 1]
[1, 1, 1, 1, 1]
7.2、高阶函数map/filter/reduce
7.2.1、map(f,sq)将函数f作用到sq的每一个元素上,并返回结果组成的列表。
def square(x):
return x*x
print(list(map(square, range(5))))
>>>[0, 1, 4, 9, 16]
7.2.2、filter(f,sq)函数作用相当于,对于sq的每个元素s,返回所有f(s)为True的s组成的列表。
def is_even(x):
return x % 2 == 0
print(list(filter(is_even, range(5)))))
>>>[0, 2, 4]
7.2.3、reduce(f,sq)函数,reduce函数会对参数序列中元素进行累积。
python3中在Python 3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里 用的话要 先引
入
from functools import reduce
def my_add(x, y):
return x + y
print(reduce(my_add, [1,2,3,4,5]))
>>>15
7.3、列表推导式
variable = [表达式 for 变量 in 列表 if 条件]
li = [1,2,3,4,5,6,7,8,9]
print([x**2 for x in li if x>5])
>>[36, 49, 64, 81]
7.4、匿名函数
lambda 变量: 表达式
map(lambda x: x * x, range(5)
>>>[0, 1, 4, 9, 16]
8、迭代器和生成器
8.1、迭代器
迭代器是一个可以记住遍历的位置的对象。迭代器有两个基本的方法:iter() 和 next()。
>>list=[1,2,3,4]
>> it = iter(list) # 创建迭代器对象
>>next(it) # 输出迭代器的下一个元素
1
>> next(it)
2
创建一个迭代器
把一个类作为一个迭代器使用需要在类中实现两个方法 iter() 与 next() 。
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration #StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)
>>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
8.2生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
import sys
def fibonacci(n): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()
>>0 1 1 2 3 5 8 13 21 34 55