python学习笔记

 
  1 笔记记录:
  2 1、#交互,输入name
  3 name = raw_input('what is  your name?')
  4      #实现多行交互输入,输入Q结束输入
  5 user_date=''
  6 stopword='Q'
  7 with open("tmp.txt",'w') as f:
  8 for line in iter(raw_input,stopword):
  9 user_date = line +'\n'
 10 f.write(user_date)
 11 
 12 2、#读取文件存入到account_list , 后面是写入
 13 f = file(account_file)
 14 account_list = f.readlines()
 15 f.close()
 16 
 17 f = file(account_file,'a')  # a代表追加 ,如果用w 就是覆盖
 18 f.write('\n%s' % username)
 19 f.close()
 20 
 21 # 实时地写进去文件里
 22 f.flush()
 23 
 24 3、循环转换成数组.split()
 25   for line in account_list:
 26         line = line.split()
 27 
 28 4、三次循环,break是退出,continue继续: 
 29  for i in range(3):
 30 if i == 3: break
 31 else continue
 32 
 33 5、fileinput的具体用法是:
 34 fileinput.FileInput(files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None)
 35 其中:
 36 files :文件的路径列表;
 37 inplace:是否将标准输出(print方法)的结果写回文件;
 38 backup : 备份文件的扩展名;
 39 bufsize :缓冲区大小;
 40 mode :读写模式;
 41 openhook : 打开文件时的钩子;
 42 
 43 6、文件打开处理:
 44 f = f.file("f_test.txt")
 45 f.readlines()
 46 f.tell() # 当前的位置
 47 f.seek(0) # 回到指定的行数位置
 48 
 49 f.truncate(100) # 截取到100的位置
 50 
 51 # 相当于f = f.file("f_test.txt")打开,但不需要用关闭的。
 52 with open("f_test.txt",'r+') as f:
 53     f.seek(24)
 54     f.truncate(30)
 55 
 56 f.flush() 方法是用来刷新缓冲区,一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新他它,这时就可以使用flush()方法。
 57 
 58 7、列表
 59 name_list[]
 60 name_list.index(20) # 代表列表中数值20所在的位置
 61 name_list.insert(1,'Rain') # 往列表1位置 插入数值'Rain',后面的值往后排
 62 name_list.remove('Rain') # 删除列表中第一个Rain值
 63 name_list.count('Rain') # 自带统计有多少个Rain值
 64 name_list.sort() # 列表的排序
 65 name_list.pop() # 删除列表最后一个内容
 66 name_list.extend('[7,8,9]') # 按照列表格式加入
 67 name_list[4] = 'CHECK' # 修改列表第四个的内容
 68 name_list[2:7] #切片, 第2内容到7内容,不包含7
 69 name_list[7:] #第7个后面的内容
 70 name_list[-5:] #切片倒数第五个及其后面内容
 71 name_list[1:6:2] #跳着截取,2是步长,截取135内容
 72 #把列表一行打印,按照指定的分隔符'|'
 73 from __future__ import print_function
 74 names = ["Sam", "Peter", "James", "Julian", "Ann"]
 75 print(*names,sep='|')
 76 
 77 
 78 8、read()  readline()  readlines()
 79 read() #  每单个字符读取
 80 readline() # 每行读取,存入的是字符串行 
 81 readlines() # 每行读取,存入的是列表行
 82 
 83 9、startswith() 
 84 Python startswith() 方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查。
 85 line.startswith(str, beg=0,end=len(string));
 86 参数
 87 str -- 检测的字符串。
 88 strbeg -- 可选参数用于设置字符串检测的起始位置。
 89 strend -- 可选参数用于设置字符串检测的结束位置。
 90 
 91 10、字典
 92 contacts = {}
 93 # 字典里可以存任何的东西
 94 contacts = {
 95    'Alex' : 13750362307,
 96    'Rachel':[13750362308,'student',25],
 97    'Rain' : {'age':28},
 98 }
 99 
100 # 只可以修改values值的内容,不可以修改key值
101 contacts['Alex'] = 199999999999
102 
103 # 删除内容
104 del contacts['Rachel']
105 
106 # 新增内容
107 contacts['Marry'] = '666666','chiji'
108 
109 # 只打印了 key的值
110 for i in contacts:
111    print i
112 
113 # 把key和values都打印,但是按照元组来打印
114 for i in contacts.items():
115     print i
116 
117 # 把key和values分开打印
118 for x,y in contacts.items():
119     print x,y
120 
121 # 查看所有的key
122 print contacts.keys()
123 # 查看所有的values
124 print contacts.values()
125 
126 # 查询字典里的内容
127 if contacts.has_key('Alex') : print '666666666'
128 
129 11、字体添加颜色:
130 开头部分:\033[显示方式;前景色;背景色m + 结尾部分:\033[0m
131 
132 12、对齐打印
133 from prettytable import PrettyTablex = PrettyTable(["名字", "数学成绩", "语文成绩", "计算机成绩"])
134 x.add_row(["小明",200, 199, 198])x.add_row(["大明白",197, 196, 195])x.add_row(["老明亮了", 300, 299, 298])
135 print(x)
136 
137 13、函数:
138 (1)返回多个值
139 def returnMulti():
140     return 1, 2, 3
141 result = returnMulti()
142 a, b, c = returnMulti()
143 print result[0], result[1], result[2]
144 print a, b, c
145 
146 14、枚举函数
147 枚举函数enumerate 循环访问时,同时访问索引值:
148 for i in enumerate('sdfsifisneamlgljslf;fsdf'):
149     print (i)
150 
151 
152 python中的SET集合
153 python的set是一个无序不重复元素集,可以用作去重功能的。
154 
155 15、from os import system;
156 #导入os模块,可以使用shell命令,调用方式如下:
157 os.system('df')      执行失败的话结果是返回0的。  
158 os.popen('df')        执行结果是按照内容返回的。
159 
160 16、import sys,datetime
161 #导入sys,datetime模块
162 # 程序退出,直接用sys
163 sys.exit('发生错误,程序退出')
164 # 获取当前系统时间
165 getdate = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
166 
167 17、迭代器
168 迭代器一次只产生一个数据项, 占用更加少的内存。
169  迭代器,iter() 只会保留一次, 占用内存很少, 处理大量文件的时候,不建议使用列表,建议使用迭代器进行处理。
170 # 迭代器的方法只有一个 .next()
171 a = [1,2,3,4,5,6,7]
172 b = iter(a)
173 for i in b:print i
174 
175 18、lambda 匿名函数,可以理解为单行函数。 使用lambda函数不需要考虑命名函数名。
176 a=lambda i,x : i**2/(x-i)
177 
178 19、序列化
179 
180 知识 pickle , json
181 序列化 ,就是把内存的东西写到硬盘中。可以存放列表,数组
182 而如果只是用write, write只能写入的是字符串
183 import pickle
184 account_info = {
185     '92392382838':['Alex1234',15000,16000],
186     '29394823472':['Rachel',9000,9000],
187     'Rain':{
188         'age':'30',
189         'job':'salesmen'
190     }
191 }
192 f = file('account.pkl','wb')  # 二进制打开文件
193 pickle.dump(account_info,f)   # 倾泻到f文件里
194 f.close()
195 
196 f = file('account.pkl')
197 abc = pickle.load(f)
198 # pickle是可以dump多次的,但是你需要Load多次才能使用才是你需要的状态,所以一般都只建议dump一次。
199 # 使用xml格式用 跨语言数据交换。 java、python、C#、C 
200 # 现在多数使用的是 json 格式进行来数据交换。
201 import json
202 f = file ('account_info.json','wb')
203 json.dump(account_info,f)
204 f.close()
205 f = file('account_info.json')
206 b = json.load(f)
207 
208 20、 正则表达式
209 import re
210 p = re.compile('hello')
211 >>> p.match('hello hello work')  # 如果匹配不了的话,会返回None
212 <_sre.SRE_Match object at 0x10fcf5a58>
213 
214 >>> p.findall('hello hello worerenfn')   # 会以列表形式进行存储
215 ['hello', 'hello']
216 
217 p = re.compile('\d') # 匹配任何十进制数字;相当于0-9
218 p = re.compile() # 匹配任何非数字字符,相当于^0-9
219 p = re.compile('\d+') # 匹配多个数字
220 
221 # 替换
222 >>> re.sub('[a-z]','o','sjndfhsh213nfnj')
223 'oooooooo213oooo'
224 >>> re.sub(r'\d+','o','jdjsfn33n343')
225 'jdjsfnono'
226 
227 c = 'jjfs*&'
228 c.isalpha() # 检查是否有特殊字符 ,有的话返回Faluse ,没有的话返回True
229 
230 
231 --------------------------------------------------------------------------------
232 day1:
233 #!/usr/bin/env python
234 
235 print 'hello world!'
236 
237 #python 是严格用缩进来规范的。
238 if True:
239     print 'asdasdadad'
240 
241 #python 定义变量只能用大小写字母或下划线 _ 开头定义:
242 name = Alex Li  #错误:存在空格,另外如果没有加单引号,也会错误
243 
244 
245 #模块:
246 import myFrist.py as my #别名my
247 
248 from os import system;
249 #导入os模块,可以使用shell命令,调用方式如下:
250 os.system('df')      执行失败的话结果是返回0的。  
251 os.popen('df')        执行结果是按照内容返回的。
252 --------------------------------------------------------------------------------
253 #交互:
254 #!/usr/bin/env python
255 name = raw_input('what is  your name?')
256 age = raw_input('What is your age?')
257 sex = raw_input('What is your job?')
258 #外部引用变量
259 print """Person info:
260 
261         Name:  %s
262         Age :  %s
263         sex :  %s
264         Job :  %s
265 """ % (name,age,sex,job)      #%s 就是一一对应进行外部写入
266 --------------------------------------------------------------------------------
267 
268 登录脚本:
269 1、输入正确的账号密码登录
270 2、输错三次密码锁定账号
271 
272 #!/usr/bin/env python
273 # -*- coding: UTF-8 -*-
274 # 文件面 : lock.py
275 
276 
277 
278 account_file = 'username.txt'
279 lock_file = 'lock.txt'
280 
281 f = file(account_file)
282 account_list = f.readlines()
283 f.close()
284 
285 '''
286 f = file(lock_file)
287 lock_list = []
288 for i in f.readlines():
289     line = i.strip('\n') #以\n换行符来做分割
290     lock_list.append(line)  # .append() 加入数组里
291 f.close()
292 '''
293 # print lock_list
294 
295 # 定义一个参数:
296 loginSuccess = False
297 
298 
299 while True:
300     username = raw_input('user:').strip()
301     f = file(lock_file)
302     lock_list = []
303     for i in f.readlines():
304         line = i.strip('\n')  # 以\n换行符来做分割
305         lock_list.append(line)  # .append() 加入数组里
306     f.close()
307     if username in lock_list:
308         print "%s is locked,not allow login!" % username
309         break
310     for line in account_list:
311         line = line.split()
312         if len(username) != 0 and username == line[0]:
313             for i in range(3):
314                 passwd = raw_input("password:").strip()
315                 if passwd == line[1] :
316                     print "welcome %s come in my system!" % username
317                     # 改变这个标识,为了识别可以退出循环。
318                     loginSuccess = True
319                 if loginSuccess is True: break   # 为了退出for循环
320                 else:
321                     continue
322             # 循环三次密码都失败的话,才进入此步:
323             else:
324                 print "you put 3 times error password,your username: %s have locked! " %username
325                 f = file(lock_file,'a')  # a代表追加
326                 f.write('\n%s' % username)
327                 f.close()
328                 #loginSuccess = True  # 打上Ture标识,为了可以退出while巡检
329     if loginSuccess is True: break   # 为了退出 while巡检
330 
331 --------------------------------------------------------------------------------
332 #!/usr/bin/env python
333 # coding=utf-8
334 # 功能:存入字典了,输入进行模糊查询
335 import sys
336 
337 employee = {} # 定义一个字典
338 with open('employee.txt','r') as f:
339     for i in f.readlines():  # 每行读取成为以列表形式
340         print i
341         line = i.split('|') # 以分隔符'|' 存入列表
342         employee[line[0]]= line[1:] # 存入到字典里
343 '''
344 for x,y in employee.items():  # 历遍打印keys和values值
345     print x,y
346 
347 print employee.keys()
348 '''
349 
350 while True:
351     names = raw_input("please send info:")
352     if employee.has_key(names):
353         print names , employee[names]
354     else:
355         info_count = 0
356         if len(names) < 3:
357             print "must names's len more than 3"
358             continue
359         for x , y in employee.items():
360             if x.count(names) != 0:
361                 info_count += 1
362                 continue
363                 print x,'|'.join(y)
364             for i in y:
365                 if i.count(names) != 0:
366                     print x,'|'.join(y)
367                     info_count += 1

 

 

posted @ 2018-08-29 20:08  辉bird  阅读(218)  评论(0编辑  收藏  举报