1. 反转字符串:
1 #encoding=utf-8
2 #import string
3 from collections importdeque4
5 defreverse1(string):6 """利用切片"""
7 return string[::-1]8
9 defreverse2(string):10 """1. 将字符串转为列表,利用列表的reverse()函数反转 2. 使用join连接"""
11 alist =list(string)12 alist.reverse()13 newString = "".join(alist)14 returnnewString15
16 defreverse3(string):17 """利用双端队列,双端队列左侧进右侧出"""
18 q =deque()19 q.extendleft(string) #注意:extendleft(string)会将字符串string反向存入到双端队列中20 return "".join(q)21
22 defreverse4(string):23 """递归的方式,每次只取一个字母"""
24 if len(string)<=1:25 returnstring26 else:27 return reverse4(string[1:]) +string[0]28
29 defreverse5(string):30 """交换首尾字符的位置"""
31 alist = list("".join(string.split(" ")))32 for i, j in zip(range(len(alist)/2), range(len(alist)-1, 0, -1)):33 alist[i], alist[j] =alist[j], alist[i]34 return "".join(alist)35
36 defreverse6(string):37 """利用fort循环从右往左输出"""
38 list =[]39 for i in range(len(string)-1, -1, -1):40 list.append(string[i])41 return "".join(list)42
43
44
45
46 if __name__ == "__main__":47 string = "I am a string"
48 print(reverse1(string))49 printreverse2(string)50 printreverse3(string)51 printreverse4(string)52 printreverse5(string)53 print reverse6(string)
2. 求num1到num2间的质数及其个数。
1 #encoding=utf-8
2 defzhishu(num1, num2):3 """判断Num1, num2间有多少个质数"""
4 alist =[]5 n =06 for i in range(num1, num2+1):7 for j in range(2, i):8 if i % j ==0:9 break
10 if j == i-1:11 alist.append(i)12 n += 1
13 print("共有 %d 个质数,分别为:%s"%(n,alist))14
15 zhishu(101, 200)
3. 求两个列表的交集,并集,补集。
1 #encoding=utf-8
2 definterSection(alist1, alist2):3 """利用集合set求交集、并集"""
4 alist1_set =set(alist1)5 alist2_set =set(alist2)6 Intersection = alist1_set.intersection(alist2_set) #交集
7 Union = alist1_set.union(alist2_set) #并集
8 Difference = alist1_set.difference(alist2_set) #在集合alist1_set中但不在集合alist2_set中
9 Sym_difference = alist1_set.symmetric_difference(alist2_set) #两集合交集的补集
10 Intersection_alist =list(Intersection)11 Union_alist =list(Union)12 Difference_alist =list(Difference)13 Sym_difference_alist =list(Sym_difference)14 print("两个集合的交集为:%s\n两个集合的并集为:%s\n在集合a中但不在集合b中的集合为:%s\n集合a,b交集的补集为%s"%(Intersection_alist,Union_alist, Difference_alist, Sym_difference_alist))15
16
17 if __name__=="__main__":18 alist1 = ["a", "b", "d", 1, 5, 7]19 alist2 = ["a", "c", "d", 3, 5, 9]20 interSection(alist1, alist2)
4. 快速求链表中间节点
1 #coding:utf-8
2 classNode(object):3 def __init__(self, item):4 self.item =item5 self.next =None6
7 classSingleLinkList(object):8 def __init__(self, node=None):9 self.head =node10
11 defappendList(self,item):12 node =Node(item)13 cur =self.head14 if self.head ==None:15 self.head =node16 else:17 while cur.next !=None:18 cur =cur.next19 cur.next =node20
21 deftravle(self):22 if self.head ==None:23 print ("This is an empty List!")24 else:25 cur =self.head26 while cur !=None:27 printcur.item,28 cur =cur.next29 print ("\n")30
31 deffind(self, k):32 count = 1
33 cur =self.head34 if self.head ==None:35 print ("No nodes!")36 else:37 while cur.next !=None:38 if count ==k:39 printcur.item40 break
41 else:42 count += 1
43 cur =cur.next44 deffindCerter(self):45 count, count2 =0, 046 cur =self.head47 cur2 =self.head48 if self.head ==None:49 print ("No nodes!")50 else:51 while cur !=None:52 count += 1
53 cur =cur.next54 printcount55 while cur2.next !=None:56 if count2 == count/2 and count % 2 ==0:57 printcur2.item,cur2.next.item58 break
59 elif count2 == count/2 and count % 2 !=0:60 printcur2.item61 break
62 else:63 count2 += 1
64 cur2 =cur2.next65
66
67
68 if __name__ == "__main__":69 list =SingleLinkList()70 for i in range(9):71 list.appendList(i)72 list.travle()73 list.find(3)74 list.findCerter()
5. 需求:(1)文本分割:按IP地址分割文件,同时以IP地址命名新文件。
(2)检索出某用户名所在的所有IP地址
原文本信息如下:
------------------------------IP192.168.109.31用户名 用户主组名 附属组
nobody nobody nogroup
xxx users xxxx
xxxx xxxx
xxxx xxxx
xxxxx xxxx------------------------------IP192.168.109.32用户名 用户主组名 附属组
nobody nobody nogroup
xxxx users xxxx
xxxx aiuap
xxxxx xxxx
xxxxx users
#encoding=utf-8
import re
import os
"""文本按IP地址分割成多个已IP地址命名的小文件"""
#1. 读取文件每行,当匹配到该行有"IP"时,创建新的文件并以该行命名,同时往一个文件中写,如果匹配到下一个IP,则重新写入到新文件,
def splitText(file):
f = open(file)
newFile = open("temp", "w")
for line in f.readlines():
if re.search("IP", line):
newFile.close()
newFile = open(line.split(" ")[1].strip(), "w")
newFile.write(line)
f.close()
def searchIp(file):
f = open(file, "r")
dic = {}
ip = []
for line in f.readlines():
# print os.popen('tr -s ["\n"]< %s'%file).readlines() #python调用shell命令可以将文本中的空行去除,os.popen()返回的是文件,os.system()返回的是shell指令运行退出后的状态码。
if re.search("IP", line):
ip = line.split(" ")[1].strip()
continue
elif re.match("---", line) :
continue
elif re.match("用户名", line):
continue
else:
user = line.split(" ")[0].strip()
if user:
if dic.has_key(user):
dic.get(user).append(ip)
else:
dic.setdefault(user, []).append(ip) #键user不在字典中,则新增[user: ip]
print dic
下面同事写的:
def getAllDiraccount(path):
stack = []
set1 = set()
stack.append(path) # 处理栈,当栈为空的时候结束循环
while len(stack) != 0: # 从栈里取出数据
dirPath = stack.pop()
# print(dirPath)
# 目录下所有文件
filesList = os.listdir(dirPath)
# print(filesList)
# 处理每一个文件,如果是普通文件则处理找出,如果是目录则将该目录的地址压栈
for fileName in filesList:
fileAbsPath = os.path.join(dirPath, fileName)
if os.path.isdir(fileAbsPath): # 是目录就压栈
print("目录:" + fileName)
stack.append(fileAbsPath)
else:
# 找到了普通文件里面的所有账号
print("普通文件:" + fileAbsPath)
res = os.popen("awk '{print $1}' %s" % (fileAbsPath))#调用shell指令,取出文件第一列数据。
for temp in res.readlines():
set1.add(temp.strip())
print(list(set1))
if __name__=="__main__":
#splitText("user")
searchIp("user")
getALLDiraccount("J:\peng")
6. 输出某路径下的所有文件和目录下的所有文件。
1 #encoding=utf-8
2 importos3 #获取当前路径
4 #print os.getcwd()
5 deffindFileDir(path):6 """判断该路径下是文件还是目录,如果是文件则输出,如果是目录则输出目录下的文件。"""
7 fileDirList = os.listdir(path) #返回指定目录path下的所有文件和目录名
8 dic ={}9 for file infileDirList:10 newPath = path + '/' +file11 ifos.path.isdir(newPath):12 findFileDir(newPath)13 elifos.path.isfile(newPath):14 ifdic.has_key(path):15 dic.get(path).append(file)16 else:17 dic.setdefault(path, []).append(file)18 else:19 return 1
20 print("%s目录下的文件有:%s"%(dic.keys(), str(dic.values()).strip("[]")))21
22
23 if __name__=="__main__":24 path = "J:\pythonscripts"
25 findFileDir(path)
结果如下:
shell脚本如下:
1 #!/bin/bash2 #coding=utf-8
3fileOrDir()4{5 if [ -d $1] #中括号间有空格,必须有空格6 then
7 echo "$1 is a dir!"
8 for temp in `ls $1` #反单引号9 do
10 fileOrDir $1"/"$temp11 done
12 elif [ -f $1]13 then
14 echo "$1 is a file."
15 fi
16}17
18 fileOrDir $1
运行前需要先改该脚本的权限,chown u+x 文件名。或者直接执行:source ./findDirFile.sh filedir。shell中运行的结果如下:
7. python连接mysql数据库。
(1)封装连接mysql数据库相关操作。
#encoding=utf-8
importmysql.connectorclassMysqlClient(object):def __init__(self, host, user, passwd, port, db):
self.config={'user': user,'password': passwd,'host': host,'port': port,'database': db,'charset': 'utf8'}
self.con=None
self.cursor=NonedefconnectMysql(self):try:
self.con= mysql.connector.connect(**self.config) #与数据库建立连接
self.cursor = self.con.cursor() #创建游标
exceptmysql.connector.Error, e:print('connect fails!{}'.format(e))defqury(self, sql):try:
self.cursor.execute(sql)#执行ql命令
return self.cursor.fetchone() #获取查询结果的第一行
exceptmysql.connector.Error, e:print('query error!{}'.format(e))defquryAll(self, sql):try:
self.cursor.execute(sql)return self.cursor.fetchall() #获取查询结果的所有行
exceptmysql.connector.Error, e:print e.message
definsert(self, sql):try:
self.cursor.execute(sql)
self.con.commit()#提交事务
exceptmysql.connector.Error, e:print e.message
defclose(self):try:
self.cursor.close()
self.con.close()exceptmysql.connector.Error, e:print e.message
(2)调用MYSQLClient模块。
#encoding=utf-8
importMYSQLClientif __name__=="__main__":
client= MYSQLClient.MysqlClient('localhost', 'root', "", 3306, 'student')#sql = 'select clname from classinfo t1 inner join (select clid, count(*) as rf from stuscore where course = "数学" and score >90 group by clid having rf\#>=2) t2 on t1.clid=t2.clid'
sql ='select * from student'client.connectMysql()
res=client.quryAll(sql)for data inres:print ("%s%10s%10s%10s"%(data[0],data[1],data[2],data[3]))
8. 爬取百度贴吧下的某网址下的所有图片:
1 #encoding=utf-8
2 importurllib3 importre4 importos5 defgetHtml(url):6 page =urllib.urlopen(url)7 html =page.read()8 #print html.decode("UTF-8")
9 returnhtml10
11 defgetPicture(html):12 pic = 'http.+?\.jpg'
13 mng =re.compile(pic)14 jpgList =re.findall(mng, html)15 printjpgList16 count =017 path = r'J:\picture'
18 if notos.path.exists(path):19 os.makedirs(path)20 for jpg injpgList:21 count += 1
22 urllib.urlretrieve(jpg, 'J:\\picture\\%s.png'%count)23
24
25 if __name__=="__main__":26 url = "https://tieba.baidu.com/f?ie=utf-8&kw=%E5%8A%A8%E7%89%A9&fr=search"
27 html =getHtml(url)28 getPicture(html)
结果如下:
9. 多线程聊天,可用netAssist模拟多个应用进程。
#-*- coding: utf-8 -*-
from threading importThreadfrom socket import *
#多线程完成聊天#1. 线程recvData 收数据
defrecvData(udpsocket):whileTrue:
recvinfo= udpsocket.recvfrom(1024)print(recvinfo)print("%s, %s"%(recvinfo[1], recvinfo[0].decode("gb2312")))#2. 线程sendData发数据
defsendData(udpsocket):
sendAddr= ('192.168.137.2', 8080)whileTrue:
sendinfo=raw_input()#udpsocket.sendto(sendinfo, sendAddr)
udpsocket.sendto(sendinfo.decode('utf-8').encode("gb2312"), sendAddr)#3.创建线程
defmain():#global udpsocket
udpsocket =socket(AF_INET, SOCK_DGRAM)
setaddr= ("", 9090)
udpsocket.bind(setaddr)
recvdata= Thread(target=recvData, args=(udpsocket,))
senddata= Thread(target=sendData, args=(udpsocket,))
recvdata.start()
senddata.start()
senddata.join()
recvdata.join()
udpsocket.close()
NetAssist如下:
7. 客户端向服务器提出下载图片请求,并下载到本地。使用tftpd64查看下载情况。
#coding:utf-8#C/S模式,实现客户端向服务端提出下载图片请求,并下载成功。
from socket import *
importstruct#1. 创建udp套接字,绑定客户端端口
udpsocket =socket(AF_INET, SOCK_DGRAM)
setaddr= ("172.20.10.7", 13578)
udpsocket.bind(setaddr)#2. 构造下载请求数据,并发送到指定服务器
destaddr = ("172.20.10.3", 69)#destaddr = ("192.168.137.2", 69)
senddata = struct.pack("!H10sb5sb", 1, "flower.jpg", 0, "octet", 0)
udpsocket.sendto(senddata, destaddr)#3.接受服务器反馈数据
num = 1 #记录数据包快编号
recvfile = ''
whileTrue:
recvdata= udpsocket.recvfrom(1024)#print(recvdata[0])
datas = struct.unpack("!HH", recvdata[0][:4])if datas[0] == 3: #是数据包
if datas[1] == 1: #第一次接受数据包,需要创建文件
recvfile = open("flower.jpg", "a")if num == datas[1]:
recvfile.write(recvdata[0][4:])print("第 %d 次收到数据"%num)
num+= 1
print("请求第%d个包"%num)
ack= struct.pack("!HH", 4, num)udpsocket.sendto(ack, destaddr)if len(recvdata[0]) < 516:
recvfile.close()print("下载成功!")break
else:print(len(recvdata[0]))elif datas[0] == 5:print("error num : %d"%datas[1])
recvfile.close()breakudpsocket.close()
8. 交通费登记:要求,日期如:8月2日,则输入0802。时间14:35则填入14.35,中间是顿点。工作日上班时间。
1 #encoding=utf-8
2 from xlwt import *
3 from random import *
4 from datetime import *
5
6
7 defcreateFee(temp):8 count =09 defFee(temp):10 count =011 fee =[]12 whileTrue:13 fee1 = randint(170, 199)14 fee.append(fee1)15 count +=fee116 if count >=temp:17 break
18 returncount, fee19 if count <20 fee while count> (temp+100):22 (count, fee) =Fee(temp)23 length =len(fee)24 printcount25 print ("有%s张"%len(fee))26 #print ("总金额为:%s"%count)20>
27 #print("金额为:%s"%fee)
28 returnfee, length29
30
31 defcreateDate(length, startTime, endTime):32 date =[]33 #while True:
34 #date1 = str('%02d' % randint(9, 11)) + str('%02d' % randint(1, 30))
35 #if date1 not in ("1001", "1002", "1003", "1004", "1005", "1006", "1007") and date1 not in date:
36 ## if date1 not in date:
37 #date.append(date1)
38 start = datetime.strptime(startTime, '%Y%m%d')39 #print start
40 end = datetime.strptime(endTime, '%Y%m%d')41 #print end
42 while start <43 start="start" timedelta substart="start.strftime('%m%d')45" weekday="start.isoweekday()46" if in range and int not>
47 date.append(start.strftime('%m%d'))48 shuffle(date)49 #print date
50 returndate51
52
53 defcreateTime(length):54 num = [9, 10, 11, 14, 15, 16, 17]55 time =[]56 whileTrue:57 time1 = str(choice(num)) + "." + str('%02d' % randint(00, 59))58 time.append(time1)59 if len(time) ==length:60 break
61 #print time
62 returntime63
64
65 defwriteExcel(y, name1, date, time, fee):66 n =y67 #print("新的起始行号为:%s"%(n+1))
68 table.write(n+1, 0, name1)69 for k, m, l inzip(date, time, fee):70 arg = (k, m, "", "", l)71 n += 1
72 for i, item inenumerate(arg):73 table.write(n, i+1, item)74 #print("结束行号为:%s"%n)
75 returnfile, n76
77
78 if __name__ == "__main__":79 name = [U'哥哥', U'妹妹']80 total = [2000, 5600]81 startTime = "20180902"
82 endTime = "20181115"
83 y =084 file = Workbook(encoding='utf-8')85 table = file.add_sheet(U'交通')86 head = [U'姓名', U'日期', U'上车时间', U'下车时间', U'等候时间', U'金额']87 for i, item inenumerate(head):88 table.write(0, i, item)89 for temp, name1 inzip(total, name):90 (fee, length) =createFee(temp)91 time =createTime(length)92 date =createDate(length, startTime, endTime)93 (rb, y) =writeExcel(y, name1, date, time, fee)94 table =rb.get_sheet(0)95 rb.save(r"C:\Users\lenovo\Desktop\tax.xls")
9. 冒泡、选择、快速排序算法:
(1)冒泡:相邻元素两两比较,两层循环,平均时间复杂度为o(n^2),稳定。
(2)选择:设置一个索引,每趟各元素与该索引存在的值比较,找到每趟的最小值,交换。平均时间复杂度为o(n^2),不稳定。
(3)快速:设定一个基准值,所有比基准值小的放在前面,比基准值大的放后面,再分别对前、后部分递归。平均时间复杂度为O(nlongn),不稳定。
#encoding=utf-8
def bubble_sort_asc(alist, n): #时间复杂度o(n^2), 稳定
for i in range(0, n-1):
for j in range(0, n-1-i):
if alist[j] > alist[j+1]:
alist[j+1], alist[j] = alist[j], alist[j+1]
# print alist
return alist
def select_sort_asc(alist, n): #时间复杂度o(n^2), 不稳定
for i in range(0, n-1):
min = i
for j in range(i+1, n):
if alist[j] < alist[min]:
min = j
alist[i],alist[min] = alist[min],alist[i]
return alist
def quic_sort_asc(alist,begin,end):
low = begin
high = end
key = low
if begin > high:
return
while high != low:
while alist[high] > alist[key] and low < high:
high -= 1
while alist[low] <= alist[key] and low < high:
low += 1
if low < high:
alist[low], alist[high] = alist[high], alist[low]
alist[key], alist[low] = alist[low], alist[key]
quic_sort_asc(alist, begin, high-1)
quic_sort_asc(alist, high+1, end)
print alist
if __name__=="__main__":
alist = [5, 2, 6, 9, 1, 7]
n = len(alist)
# breslist = bubble_sort_asc(alist, n)
# # print breslist
# sreslist = select_sort_asc(alist, n)
# print sreslist
quic_sort_asc(alist,0,n-1)
10. 爬虫图片后,将图片转为pdf和ppt,程序如下(URL我已改过,不可用,可改为自己的URL):
#-*- coding:utf-8 -*-#encoding=utf-8
importurllibimportreimportosimportpptxfrom pptx.util importInchesfrom fitz import *
from time importsleepdefgetPicture(html, i, path):
pic= 'https.+?\.PNG'mng=re.compile(pic)
jpgList=re.findall(mng, html)#print jpgList
if notos.path.exists(path):
os.makedirs(path)for jpg injpgList:
urllib.urlretrieve(jpg, (path+ '%s.png') %i)defclean_png(path):ifos.path.exists(path):for fn inos.listdir(path):if fn.endswith('.png'):
os.remove(path+fn)defpng2ppt(path):
pptFile=pptx.Presentation()#print os.listdir(path)
picFiles = [fn for fn in os.listdir(path) if fn.endswith('.png')]
newPicFiles= sorted(picFiles, key=lambda i: int(re.match(r'(\d+)', i).group()))printnewPicFilesfor fn innewPicFiles:
slide= pptFile.slides.add_slide(pptFile.slide_layouts[1])
slide.shapes.add_picture(path+ fn, Inches(0), Inches(0), Inches(10), Inches(7.5))
pptFile.save(path+ 'Qxyou.pptx')defpng2pdf(path):
doc=fitz.open()
picFiles= [fn for fn in os.listdir(path) if fn.endswith('.png')]
newPicFiles= sorted(picFiles, key=lambda i: int(re.match(r'(\d+)', i).group()))for fn innewPicFiles:
imgdoc= fitz.open(path + fn) #打开图片
pdfbytes = imgdoc.convertToPDF() #使用图片创建单页的 PDF
imgpdf = fitz.open("pdf", pdfbytes)
doc.insertPDF(imgpdf)#将当前页插入文档
if os.path.exists(path + "Qxyou.pdf"):
os.remove(path+"Qxyou.pdf")
doc.save(path+"Qxyou.pdf") #保存pdf文件
doc.close()if __name__=="__main__":
path= 'E:\\mylearning\\tmp\\'
for i in range(1, 126):
url= "https://www.qxy.com/qxy/web/res/img/school/handout/473257cd-429c-444a-8d24-fe55430554db/" + str(i) + ".PNG"getPicture(url, i, path)
sleep(0.5)
png2ppt(path)
png2pdf(path)
clean_png(path)
43>