-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpython
More file actions
300 lines (239 loc) · 9.76 KB
/
python
File metadata and controls
300 lines (239 loc) · 9.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
单引号,双引号,三引号
无论单引号,双引号还是三引号,所括住的内容都是字符串。
单引号,双引号和三引号,可以相互包含,而不会使解释器混乱。三引号可以跨行,(
python会自动加上\n)其他的两个不可以。用print输出时,按照字符串的内容输出。
python中数的表示
最新的python中,数分为:
整数(可以无限大), 浮点型数,虚数(eg.12j/J).可以用type()函数来查看一个数字的类型
>>> type(1)
<class 'int'>
>>> type(1.0)
<class 'float'>
>>> type(1j)
<class 'complex'>
python中无论什么类型的两个实数相除(/),都会返回浮点型值。取余(%),返回的是余数.print格式分隔符(format specifier):
%f #浮点型输出,可以指定精度。eg. %.02f, %10.02f
%E(e) #科学计数法输出
%X(x) #十六进制输出
%o #八进制输出
python变量名只是内存中一块数据的别名。
python中有些名字是保留的。如下:
and, as ,assert,break, class ,continue,def, elif, else,
except, del, exec, False, finally, for, from, global, if, import,
in, is ,lambda, not, None, or, pass, print, raise, return, try,True,
while, with, yield
python的复杂数据类型
tuple(元组):不可改变的一组数据,可以容纳任何类型的数据
表示方法:()
方法:
a = ("a","b","c")
索引(index): a[2]
长度: len(a)
list(列表):可改变的一组数据,可以容纳任何类型的数据
表示方法:[]
方法:
a = [ "apple","orange", "egg"]
索引(index): a[2]
长度:len(a)
append(): a.append("jack") #增加一个item
extend():y a.extend(["tom","US"]) #把一个列表的元素加入已有列表
pop() : a.pop(index) #删除index位置的元素,如果index为空,则为最后一个
dictionary(字典):一组序列值。key必须是不可变的,比如string,number,tuple, key value可以是任意类型。
表示方法:{}
方法:
a = { 1:"wolf", 2:"python",3 :"london"}
索引(index): 按值索引, a[1]
keys(): a.keys() #返回所有的key
values(): a.values #返回所有的key values
set (集合):一组不可重复的数据,类似于dict,但是又没有key values。
特殊类型:
None,nothing ,一般的函数返回的都是None
布尔类型(True, False):
贯穿于string, list ,tuple中的切片slice
a[2:3]
函数:
函数的一个属性docstring, myfunction.__doc__
dir显示了一个对象的所有属性。
函数变量的作用域
设置缺省的变量值
python允许在函数里定义函数
python中的模块
当import一个模块后,这个模块内的所有对象都被放在这个模块的作用域内。(重新
构建一个作用域).from ...import 把对象放在当前的作用域.
package(包),是文件的集合,但是必须有__init__.py文件,它告诉python,这个目录
不是一个普通的目录,是一个包。因为包不像module,导入一个包,首先要处理的就是
__init__.py文件,在这个文件中可以指定那些module可以使用,怎么使用( 默认情况下)
__name__是模块的都有的一个属性,它指的是模块的名字, __main__就是模块的名字,无论他是什么,这个通常用来测试用。
文件:
open()创建一个文件对象,write,写入文件.
readline(),返回文件的一行.
read()返回整个文件作为一个string。
readlines()返回整个文件作为一个列表,列表里是以行为单位为一字符串.无须完全加载到内存中.
python在操作文件的过程中,遇到错误,就会raise个IOError的异常。
os模块:
os模块包含另外一个模块,os.path,
os.path.join:
>>> os.path.join("/home/wolf", "programming")
'/home/wolf/programming'
os.path.split():
>>> os.path.split("/home/wolf/programming")
('/home/wolf', 'programming')
os.path.splitext():
>>> os.path.splitext("icon.py")
('icon', '.py')
os.path.abspath():
>>> os.path.abspath("icon.py")
'/home/wolf/programming/python/icon.py'
os.path.isfile(),os.path.isdir():
>>> os.path.isfile("icon.py")
True
>>> os.path.isdir("/home/wolf")
os.path.getsize():
>>> os.path.getsize("/home/wolf/programming/python/icon.py")
397
目录:
os.listdir():>>> os.listdir("/")
['mnt', 'proc', 'lost+found', 'tmp', 'bin', 'sys', 'vmlinuz.old', 'initrd.img', 'selinux', 'home', '.ure', 'root', 'media', 'sbin', 'boot', 'vmlinuz', 'var', 'opt', 'srv', 'usr', 'etc', 'lib', 'cdrom', 'initrd.img.old', 'dev']
>>> sorted(os.listdir("/"))
['.ure', 'bin', 'boot', 'cdrom', 'dev', 'etc', 'home', 'initrd.img', 'initrd.img.old', 'lib', 'lost+found', 'media', 'mnt', 'opt', 'proc', 'root', 'sbin', 'selinux', 'srv', 'sys', 'tmp', 'usr', 'var', 'vmlinuz', 'vmlinuz.old']
time模块
time.ctime:
>>> buildTime = os.path.getmtime("/home/wolf")
>>> print(time.ctime(buildTime))
Tue Aug 31 17:04:20 2010
重命名,移动,复制,删除文件
shutil模块提供了这些功能
shutil.move :移动文件
>>> import shutil
>>> shutil.move("file", "/tmp/file")
shutil.copy():
>>> shutil.copy("file","/home/wolf")
os.remove():
>>> os.remove("/home/wolf/file.txt")
创建,删除目录:
os.mkdir(),os.rmdir(): os.rmdir()只能删除空文件
>>> os.mkdir("/home/wolf/python")
>>> os.rmdir("/home/wolf/python")
如果要删除一个没有,shutil.rmtree()
>>> shutil.rmtree("/tmp/test")
python 中的通配符
* #匹配任何字符(串)
? #匹配一个字符
[] #匹配括号中的选项
[!] #匹配非括号中的选项
[1-9],[a-z],匹配1-9,a-z中的任意字符(数字)
模块glob
glob.glob返回符合条件的路径名
>>> import glob
>>> glob.glob("/tmp/[so]*")
['/tmp/scim-helper-manager-socket-wolf', '/tmp/ssh-VWuCMO2736', '/tmp/orbit-wolf', '/tmp/scim-panel-socket:0-wolf', '/tmp/scim-socket-frontend-wolf', '/tmp/svi4c.tmp', '/tmp/seahorse-WYEPIf']
lambda 函数:lambda函数又叫无名函数.
>>>lambda x: x*x
filter(): 过滤函数,依据一定的函数,返回符合条件的元素
map(): 把相应的元素映射为一定的值
在python3.1中,map 返回迭代器,在以前的版本中返回一个列表
list comprehension 也有同样的功能,比如:
>>> a = map(lambda x : x*x , [1,2,3])
>>> print(*a)
1 4 9
>>> [x*x for x in [1,2,3]]
[1, 4, 9]
迭代器:
python 提供了很多中方法创建迭代器。
其中之一就是range()函数
>>> foo = range(2,9,2)
>>> foo
range(2, 9, 2)
>>> print(*foo)
2 4 6 8
range()产生一个迭代器,但是也有线性数据结构的性质
>>> foo[1]
4
>>> foo[3]
8
好处就是占用的内存比较小,无论生成的数据是多少.
字符串格式化之字典
>>>person = {"name": "jack", "age": 20, "status":"student"}
>>> print("%(name)s" % person)
jack
python库小瞥
getopt:
getopt.getopt 和getopt.gnu_getopt
多进程:
os.fork()
os.execl()
多线程:
threading.Thread
再谈模块:
dir() 函数查找module信息
>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'int_info', 'intern', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'pydebug', 'setcheckinterval', 'setdlopenflags', 'setfilesystemencoding', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions']
在导入(import)模块的时候,python依据sys.path路径来搜索模块
>>> import foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named foo
>>> import sys
>>> print(sys.path)
['', '/usr/lib/python3.1', '/usr/lib/python3.1/plat-linux2', '/usr/lib/python3.1/lib-dynload', '/usr/lib/python3.1/dist-packages', '/usr/local/lib/python3.1/dist-packages']
构建自己的模块和包
面向对象的思想:
*封装(encapsulation)
*继承(inheritance)
*多态(polymorphism)
构建自己的模块,至少要完成如下:
*定义自己的错误和异常
自定义的异常是Exception的子类
*定义api
_(一个下划线)开头的变量(函数),默认是不被导入的,如果需要导入,自己定义__all__函数,例如:
__all__ = ["wolf", "wolfName", "wolfAge"]
*文档
*测试自己的模块
安装模块
使用python的distutils包,
首先创建衣蛾setup脚本,setup.py
from distutils.core import setup
setup(name = "nameOfModule",
version="2.0",
py_modules=["nameoOfModule"],)
后执行
python setup.py install
text processing
os模块处理文件系统
os.getcwd()
os.listdir()
os.stat(path)
os.path.split(path)
os.path.join()
os.path.normcase(path)
os.walk(top, topdown=True,
onerror=None, followlinks = False)
正则表达式:
re
python高级应用
1.testing : PyUnit
2.GUI
3.database
DBM: 以dict存储在硬盘上,有很多中实现,字典的Key 和value都必须是string
除非需要dbm的特别功能,用dbm模块.python会自动选择最好的dbm实现.
就像打开一个普通的文件一样,open()函数,close()函数,增加元素的方法就是
用字典实现。比如:
import dbm
db = dbm.open("websites", "c")
db["www.python.org"] = "python home page"
print(db["www.python.org"])
db.close()
relational DB: 关系型数据库。数据库-->表-->记录(行).
primary key :在列中是唯一的,
foreign key: 是另外的表的一个列
sqlite3模块
首先建立连接:
conn = sqlite3.connect("db")
创建cursor对象:
c = conn.cursor()
调用cursor对象:
cursor.execute()
可以执行的操作:
新建,插入,查询,更新,相应的sql语句.
Django: