一起學Python吧~函數編程之釘釘機器人

#!/bin/env python3
#-*- coding:utf8 -*-
#學Python3的第十三天
#paramiko模塊
# """pip安裝paramiko模塊
# #pip install paramiko
# """
# import paramiko
#
#
# ssh = paramiko.SSHClient()  #創建SSHClient對象
# #自動接收服務器發來的祕鑰,相當於是自懂回答yes
# ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# ssh.connect('192.168.1.50', username='root', password='123')  #登錄
# result = ssh.exec_command('id root; id csdnak')  #執行命令
# #分析返回的結果,result是一個長度爲3的元組
# len(result)
#
# #result中的三項分別是輸入 輸出和錯誤的類文件對象.
# stdin, stdout, stderr = result
# out = stdout.read()  #讀取輸出信息
# err = stderr.read()  #讀取錯誤信息
# out.decode()   #將bytes轉爲str
# err.decode()
#
# print(out)
# print(err)
#
# ssh.close()  #關閉鏈接

#將上方寫成函數程序
# import paramiko
#
# def rcmd(host,user='root',passwd=None,port=22,cmd=None):
#     ssh = paramiko.SSHClient()
#     ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
#     ssh.connect(host, username=user,port=port, password=passwd)
#     stdin, stdout ,stderr = ssh.exec_command(cmd)
#     out = stdout.read()
#     err = stderr.read()
#     if out:
#         print('\033[32;1m[%s] OUT:\n%s\033[0m' % (host, out.decode()))
#     if err:
#         print('\033[31;1m[%s] ERROR:\n%s\033[0m' % (host, err.decode()))
#
#     ssh.close()
#
# if __name__ == '__main__':
#     rcmd('192.168.1.50', passwd='123', cmd='id csdnak;sl')

#改良:使其能講內容寫入文件(自由發揮)
# import paramiko
# import sys
#
# def rcmd(host,user='root',passwd=None,port=22,cmd=None):
#     ssh = paramiko.SSHClient()
#     ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
#     ssh.connect(host, username=user,port=port, password=passwd)
#     stdin, stdout ,stderr = ssh.exec_command(cmd)
#     out = stdout.read()
#     err = stderr.read()
#     alist = []
#     if out:
#         while True:
#             with open('/tmp/query.txt','wb') as fobj:
#                 data = out.decode()
#                 if not data:
#                     break
#                 alist.append(data)
#                 fobj.write(alist)
#     if err:
#         while True:
#             with open('/tmp/query.txt','wb') as fobj:
#                 data = err.decode()
#                 if not data:
#                     break
#                 alist.append(data)
#                 fobj.write(alist)
#     ssh.close()
#
# if __name__ == '__main__':
#     rcmd('192.168.1.50', passwd='123', cmd='id csdnak;sl')

#優化版本
# import paramiko
# import sys
# import getpass
# import threading
# import os
#
#
# def rcmd(host,user='root',passwd=None,port=22,cmd=None):
#     ssh = paramiko.SSHClient()
#     ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
#     ssh.connect(host, username=user,port=port, password=passwd)
#     stdin, stdout ,stderr = ssh.exec_command(cmd)
#     out = stdout.read()
#     err = stderr.read()
#     if out:
#         print('\033[32;1m[%s] OUT:\n%s\033[0m' % (host, out.decode()))
#     if err:
#         print('\033[31;1m[%s] ERROR:\n%s\033[0m' % (host, err.decode()))
#
#     ssh.close()
#
# if __name__ == '__main__':
#     #rcmd('192.168.1.50', passwd='123', cmd='id csdnak;sl')
#     if len(sys.argv) != 3:
#         print("Usage: %s ipfile 'command" % sys.argv[0])
#         exit(1)
#
#     if not os.path.isfile(sys.argv[1]):
#         print('No such file: ',sys.argv[1])
#         exit(2)
#
#     ipfile = sys.argv[1]
#     cmd = sys.argv[2]
#     passwd = getpass.getpass()
#     with open(ipfile) as fobj:
#         for line in fobj:
#             ip = line.rstrip() #去除行末尾的\n
#             #rcmd(ip, passwd=passwd , cmd=cmd)
#             t = threading.Thread(
#                 target=rcmd, args=(ip,),
#                 kwargs={'passwd': passwd, 'cmd': cmd}
#             )
#             t.start() #rcmd(*args, **kwargs)

#*************郵件編程
# """
# 寫郵件: 使用email模塊
# 發郵件: 使用smtplib模塊
# """
# from email.mime.text import MIMEText
# from email.header import Header
# import smtplib
#
# #準備郵件
# msg = MIMEText('這是一封Python郵件測試\n','plain','utf8') #plain普通文本郵件模式
# msg['From'] = Header('root', 'utf8')
# msg['To'] = Header('bob', 'utf8')
# msg['Subject'] = Header('py test', 'utf8')
#
# #發送郵件
# smtp = smtplib.SMTP('127.0.0.1')
# smtp.sendmail('root', ['root', 'student'], msg.as_bytes()) #bytes/string都行
# smtp.close()


#******改良:改成函數 local_mail.py
# #優化版本
# from email.mime.text import MIMEText
# from email.header import Header
# import smtplib
# import getpass
#
# def send_mail(body, sender, receivers, subject, host, passwd):
#     # 準備郵件
#     msg = MIMEText(body, 'plain', 'utf8')
#     msg['From'] = Header(sender, 'utf8')
#     msg['To'] = Header(receivers[0], 'utf8')
#     msg['Subject'] = Header(subject, 'utf8')
#
#     # 發送郵件
#     smtp = smtplib.SMTP()
#     smtp.connect(host)
#     #smtp.starttls() #如果服務器要求安全通信,打開此註釋
#     smtp.login(sender, passwd)
#     smtp.sendmail(sender, receivers, msg.as_bytes())
#     smtp.close()
#
#
# if __name__ == '__main__':
#     body = '這是一封來自Python的郵件測試\n'
#     sender = '[email protected]'
#     receivers = ['[email protected]']
#     subject = 'py test'
#     host = 'smtp.163.com'
#     passwd = getpass.getpass()
#     send_mail(body, sender, receivers, subject, host, passwd)



#***************進一步優化(自由發揮)
# from email.mime.text import MIMEText
# from email.header import Header
# import smtplib
# import getpass
#
#
# def send_mail(body, sender, receivers, subject, host, passwd):
#     msg = MIMEText(body, 'plain', 'utf8')
#     msg['From'] = Header(sender, 'utf8')
#     msg['To'] = Header(receivers[0], 'utf8')
#     msg['Subject'] = Header(subject, 'utf8')
#
#     smtp = smtplib.SMTP()
#     smtp.connect(host)
#     # smtp.starttls()  # 如果服務器要求安全通信,打開此註釋
#     smtp.login(sender, passwd)
#     smtp.sendmail(sender, receivers, msg.as_bytes())
#     smtp.close()
#     print('\033[32;1mEmail: Send successful!\033[0m')
#
#
# if __name__ == '__main__':
#     prompt = """\033[32m(1) SendEmail
# (2) Exit
# 請選擇(1/2): """
#     while True:
#         choice = input(prompt).strip()[0]
#         if choice == '1':
#             try:
#                 sender = input('\033[32mUserName: ')
#                 passwd = getpass.getpass()
#                 subject = input('\033[32mPlease input subject: ')
#                 body = input('\033[32mPlease input content: ')
#                 receivers = [input('\033[32mAddressee: ')]
#                 host = 'smtp.163.com'
#                 send_mail(body, sender, receivers, subject, host, passwd)
#             except (KeyboardInterrupt,EOFError):
#                 print('\033[32;1m\nBye-bye!\033[0m')
#                 exit(1)
#         else:
#             print('\033[32;1m\nBye-bye!\033[0m')
#             break

#*************JSON*************
# """
# JSON(JavaScript Object Notation)是一種輕量級的數據交換格式
# JSON採用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C, C++, C#,
# Java,JavaScript, Perl, Python等)
# - python只要將數據類型轉成json格式,其他語言的程序接收後,還能轉成它能理解的數據類型
# """
# import json
#
# adict = {'name': 'bob', 'age': 20}
# json.dumps(adict)
# data = json.dumps(adict) #將字典轉成json字符串
# print(type(data))
# print(data)
#
# rdata = json.loads(data) #將json字符串轉換成字典
# print(type(rdata))
# print(rdata)

#************requests模塊*******
# """
# Requests是用python語言編寫的,優雅而簡單的HTTP庫
# Requests內部採用urillib3
# 常用的HTTP方法
#     GET:瀏覽器中輸入網址,點擊超鏈接,表單的默認提交方式
#     POST:表單明確聲明的方法,用於提交數據
#     put /delete/options/head
# requests模塊爲每種方法都創建了函數
# """
# import requests
#
# url1 = 'http://www.163.com'
# r=requests.get(url1)
# r.text #r.text用於顯示字符內容
#
# url2 = 'http://www.163.com'
#   #改地址是一個圖片的URL
# r2 = requests.get(url2)
# with open('/tmp/bbb.jpg','wb') as fobj:
#     fobj.write(r2.content) #非字符內容用r2.content
#
# #北京的城市的代碼:101010100
# url3 = 'http://www.weather.com.cn/data/sk/101010100.html'
# r3 = requests.get(url3)
# r3.encoding = 'utf8' #修改編碼
# print(r3.json() #返回json數據

#*****查快遞
# import requests
#
# url = 'http://www.kuaidi100.com/query'
# param = {'type': 'yuantong',"postid": '4182963481428'}
# r = requests.get(url,params=param)
# print(r.json())
# """
# #瀏覽器上對應的url:
# http://www.kuaidi100.com/query?type='yuantong&postid=4182963481428'
# """
#****配置釘釘機器人(用前 吧前面全部都註釋了 包括""""""也註釋)
# import requests
# import json
# import getpass
#
# url = getpass.getpass()
# # 頭部固定的,釘釘開發者手冊上明確要求的
# headers = {'Content-Type': 'application/json;charset=utf-8'}
# # data是從釘釘開發者手冊上粘過來的
# # data = {
# #     "msgtype": "text",
# #     "text": {
# #         "content": "天王蓋地虎。我就是我, 是不一樣的煙火@156xxxx8827"
# #     },
# #     "at": {
# #         "atMobiles": [  # @哪些人
# #             "156xxxx8827",
# #             "189xxxx8325"
# #         ],
# #         "isAtAll": False  # 是否@所有人
# #     }
# # }
#
# data = {
#     "msgtype": "markdown",
#     "markdown": {
#         "title": "杭州天氣",
#         "text": "#### 杭州天氣 @156xxxx8827\n" +
#                 "> 9度,西北風1級,空氣良89,相對溫度73% 天王蓋地虎\n\n" +
#                 "> ![screenshot](https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png)\n"  +
#                 "> ###### 10點20分發布 [天氣](http://www.sogou.com/) \n"
#     },
#     "at": {
#         "atMobiles": [
#             "156xxxx8827",
#             "189xxxx8325"
#         ],
#         "isAtAll": False
#     }
# }
#
# # 釘釘開發者手冊明確要求,使用post方法
# # 字典不能直接發送,必須轉成json字符串
# r = requests.post(url, headers=headers, data=json.dumps(data))
# print(r.json())

#********************************部署zabbix釘釘報警*************************
# import requests
# import json
#
# url = 'http://192.168.1.50/api_jsonrpc.php'
# header = {'Content-Type': 'application/json-rpc'}

#################################
# #如果獲取公共信息,可以直接發送請求,如軟件版本
# data = {
#     "jsonrpc": "2.0", #zabbix採用jsonrpc協議,固定值
#     "method": "apiinfo.version", #方法
#     "params": [], #參數
#     "id": 101 #隨意給一個數字表示作業號
# }
##################################
# #通過用戶名和密碼獲取認證令牌
# data = {
#     "jsonrpc": "2.0",
#     "method": "user.login",
#     "params": {
#         "user": "Admin",
#         "password": "zabbix"
#     },
#     "id": 1,
# }
#####################################
#獲取所有的主機
# data = {
#     "jsonrpc": "2.0",
#     "method": "host.get",
#     "params": {
#         "output": "extend",
#         "filter": {           #過濾出符合條件的主機
#             # "host": [
#             #     "Zabbix server",
#             #     "Linux server"
#             # ]
#         }
#     },
#     "auth": "e42fd5b516ed9dc6d5c8db2aa990eb3c", #從上個步驟獲取認證令牌
#     "id": 1
# }
#######################################
#刪除主機
# data = {
#     "jsonrpc": "2.0",
#     "method": "host.delete",
#     "params": [
#         "10254",  # 刪除主機id是10254的主機
#     ],
#     "auth": "e42fd5b516ed9dc6d5c8db2aa990eb3c",
#     "id": 1
# }

#######################################
#獲取Linux Server組的ID
# data = {
#     "jsonrpc": "2.0",
#     "method": "hostgroup.get",
#     "params": {
#         "output": "extend",
#         "filter": {
#             "name": [
#                 "Linux servers",
#             ]
#         }
#     },
#     "auth": "e42fd5b516ed9dc6d5c8db2aa990eb3c",
#     "id": 1
# }
#######################################
#獲取Template OS Linux的ID =>10001
# data = {
#     "jsonrpc": "2.0",
#     "method": "template.get",
#     "params": {
#         "output": "extend",
#         "filter": {
#             "host": [
#                 "Template OS Linux",
#             ]
#         }
#     },
#     "auth": "e42fd5b516ed9dc6d5c8db2aa990eb3c",
#     "id": 1
# }

######################################
#創建名nsd1906web1的主機,他在Linux Servers組中 應用Tempate OS Linxu末班
# data = {
#     "jsonrpc": "2.0",
#     "method": "host.create",
#     "params": {
#         "host": "Linux server",
#         "interfaces": [  #通過什麼方式監控
#             {
#                 "type": 1,
#                 "main": 1,
#                 "useip": 1,
#                 "ip": "192.168.4.100",
#                 "dns": "",
#                 "port": "10050"
#             }
#         ],
#         "groups": [
#             {
#                 "groupid": "2"
#             }
#         ],
#         "templates": [
#             {
#                 "templateid": "10001"
#             }
#         ],
#         "inventory_mode": 0,   # 主機資產記錄
#         "inventory": {
#             "macaddress_a": "mei you",
#             "macaddress_b": "56768"
#         }
#     },
#     "auth": "e42fd5b516ed9dc6d5c8db2aa990eb3c",
#     "id": 1
# }




###############################
#輸出內容,主要關注result即可
# r = requests.post(url, headers=header, data=json.dumps(data))
# print(r.json())
#******************************************************************************










#**************晚間練習***************
#多進程基礎
# import os
#
# print('starting...')
# os.fork() #生成子進程.後續代碼同時在父子進程中執行
# print('Hello World!')
# #***********根據fork返回值判斷是父進程還是子進程
# import os
#
# print('starting...')
#
# pid = os.fork() #返回值十個數字,對於父進程,返回值是個子進程pid,子進程是0
# if pid:
#     print('In parent') #父進程執行的代碼
# else:
#     print('In child') #子進程執行的代碼
#
# print('Done') #父子進程都會執行的代碼

"""
多進程編程時,要明確父子進程的工作。如:父進程只用於fork子進程;
子進程做具體的工作,如果在循環結構中,做完後要退出,否則子進程還會再產生子進程、
孫進程……子子孫孫無窮匱也,系統崩潰。
"""
# import os
#
# for i in range(5):
#     pid = os.fork() #父進程的工作是生成子進程
#     if not pid: #如果是子進程,工作完後,結束,不要進入循環
#         print('hello')
#         exit() #注視着一行執行,查看結果,分析原因
#
#
# #多進程的ping
# import subprocess
# import os
#
# def ping(host):
#     rc = subprocess.call(
#         'ping -c2 %s > /dev/null' % host,
#         shell=True
#     )
#     if rc:
#         print('%s: down' % host)
#     else:
#         print('%s: up' % host)
#
# if __name__ == '__main__':
#     ips = ('192.168.1.%s'% i for i in range(1,255))
#     for ip in ips:
#         pid = os.fork()
#         if not pid:
#             print(ip)
#             exit()

#多進程的效率
# import  time
#
# def calc():
#     result = 0
#     for i in range(1,50000001):
#         result +=i
#     print(result)
#
# if __name__ == '__main__':
#     start = time.time()
#     calc()
#     calc()
#     end = time.time()
#     print(end - start)

# import time
# import os
# def calc():
#     result = 0
#     for i in range(1,50000001):
#         result +=i
#     print(result)
#
# if __name__ == '__main__':
#     start = time.time()
#     for i in range(2):
#         pid = os.fork()
#         if not pid:
#             calc()
#             exit()
#         os.waitpid(-1,0) #掛起父進程,直到子進程結束接繼續向下執行
#         os.waitpid(-1,0) #每個waitpid只能處理一個殭屍進程,兩個子進程需要太偶用兩次
#         end = time.time()
#         print(end - start)

# #殭屍進程
# import  os
# import time
#
# pid = os.fork()
#
# if pid:
#     print('In parent.sleeping...')
#     time.sleep(60)
#     print('parent done.')
# else:
#     print('In child.sleeping...')
#     time.sleep(10)
#     print('child done') #10秒後,子進程變成了殭屍進程
#
# #watch -n1 ps a 當子進程成爲殭屍進程,顯示爲z
# #kill 試圖殺死殭屍進程,附近進程,查看結果

#解決殭屍進程問題
# import os
# import time
#
# pid = os.fork()
#
# if pid:
#     print('In parent sleeping...')
#     print(os.waitpid(-1,1)) #無殭屍進程可以處理,返回0
#     time.sleep(20)
#     print(os.waitpid(-1,1)) #處理殭屍進程,返回子進程PIP
#     time.sleep(60)
#     print('parent done.')
# else:
#     print('In hcild.sleeping...')
#     time.sleep(10)
#     print('child done')
#
# # watch -n1 ps a  當子進程成爲殭屍進程時,顯示爲Z
# # kill 試圖殺死殭屍進程、父進進程,查看結果

#基於多進程的時間消息服務器
# import socket
# import os
# from time import strftime
#
# class TcpTimeServer:
#     def __init__(self,host='',port=12345):
#         self.addr = (host,port)
#         self.serv = socket.socket()
#         self.serv.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#         self.serv.bind(self.addr)
#         self.serv.listen(1)
#
#     def chat(self,c_sock):
#         while True:
#             data = c_sock.recv(1024)
#             if data.strip() == b'quit':
#                 break
#             data = '[%s]%s'% (strftime('%H:%M:%S'),data.decode('utf8'))
#             c_sock.send(data.encode('utf8'))
#         c_sock.close()
#
#     def mainloop(self):
#         while True:
#             cli_sock,cli_addr = self.serv.accept()
#             pid = os.fork()
#             if pid:
#                 cli_sock.close()
#                 while True:
#                     result = os.waitpid(-1,1)[0] #waitpid會優先處理殭屍進程
#                     if result == 0:
#                         break
#             else:
#                 self.serv.close()
#                 self.chat(cli_sock)
#                 exit()
#
#         sel.serv.close()
#
#
# if __name__ == '__main__':
#     s = TcpTimeServer()
#     s.mainloop()

# #基於多線程的ping
# import subprocess
# import threading
#
# def ping(host):
#     rc = subprocess.call(
#         'ping -c2 %s & > /dev/null' % host,
#         shell=True
#     )
#     if rc:
#         print('%s: down'% host)
#     else:
#         print('%s: up'% host)
#
# if __name__ == '__main__':
#     ips = ['172.40.58.%s' % i for i in range(1,255)]
#     for ip in ips:
#         #創建線程,ping是上面定義的函數,args是傳給ping函數的參數
#         t = threading.Thread(target=ping,args=(ip,))
#         t.start()

#多線程的效率
# import time
# import threading
#
# def calc():
#     result = 0
#     for i in range(1,50000001):
#         result += i
#     print(result)
#
# if __name__ == '__main__':
#     start = time.time()
#     t1 = threading.Thread(target=calc)
#     t1.start()
#     t2 = threading.Thread(target=calc)
#     t2.start()
#     t1.join() #掛起主進程.當t1簡稱執行完後才繼續向下執行
#     t2.join()
#     end = time.time()
#     print(end - start)

# #基於多進程的時間消息服務器
# import socket
# import threading
# from time import strftime
#
# class TcpTimeServer:
#     def __init__(self, host='', port=12345):
#         self.addr = (host, port)
#         self.serv = socket.socket()
#         self.serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
#         self.serv.bind(self.addr)
#         self.serv.listen(1)
#
#     def chat(self, c_sock):
#         while True:
#             data = c_sock.recv(1024)
#             if data.strip() == b'quit':
#                 break
#             data = '[%s] %s' % (strftime('%H:%M:%S'), data.decode('utf8'))
#             c_sock.send(data.encode('utf8'))
#         c_sock.close()
#
#     def mainloop(self):
#         while True:
#             cli_sock, cli_addr = self.serv.accept()
#             t = threading.Thread(target=self.chat, args=(cli_sock,))
#             t.start()
#
#         self.serv.close()
#
# if __name__ == '__main__':
#     s = TcpTimeServer()
#     s.mainloop()

#並行批量管理遠程服務器
#remote_comm.py
# import sys
# import getpass
# import paramiko
# import threading
# import os
#
# def remote_comm(host,pwd,command):
#     ssh = paramiko.SSHClient()
#     ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#     ssh.connect(hostname=host,username='root',password=pwd)
#     stdin , stdout , stderr = ssh.exec_command(command)
#     out = stdout.read()
#     err = stderr.read()
#     if out:
#         print('[%s]OUT:\n%s' % (host,out.decode('utf8')))
#     if err:
#         print('[%s]ERROR:\n%s' % (host,err.decode('utf8')))
#     ssh.close()
#
# if __name__ == '__main__':
#     if len(sys.argv) != 3:
#         print('Usage: %s ipaddr_file "command"' % sys.argv[0])
#         exit(1)
#     if not os.path.isfile(sys.argv[1]):
#         print('No such file: ',sys.argv[1])
#         exit(2)
#     fname = sys.argv[1]
#     command = sys.argv[2]
#     pwd = getpass.getpass()
#     with open(fname) as fobj:
#         ips = [line.strip() for line in fobj]
#
#     for ip in ips:
#         t = threading.Thread(target=remote_comm,args=(ip,pwd,command))
#         t.start()

#*************配置ip地址
# import sys
# import re
# from _curses import raw
#
#
# def configip(fname, ip_addr, if_ind):
#     content = """TYPE=Ethernet
# BOOTPROTO=none
# NAME=eth%s
# DEVICE=eth%s
# ONBOOT=yes
# IPADDR=%s
# PREFIX=24
# """ % (if_ind, if_ind, ip_addr)
#     with open(fname, 'w') as fobj:
#         fobj.write(content)
#
# def check_ip(ip_addr):   # 判斷IP地址是不是X.X.X.X格式
#     m = re.match(r'(\d{1,3}\.){3}\d{1,3}$', ip_addr)
#     if not m:
#         return False
#     return True
#
# def show_menu():
#     prompt = """Configure IP Address:
# (0) eth0
# (1) eth1
# (2) eth2
# (3) eth3
# Your choice(0/1/2/3): """
#     try:
#         if_ind = raw_input(prompt).strip()[0]
#     except:
#         print ('Invalid input.')
#         sys.exit(1)
#
#     if if_ind not in '0123':
#         print ('Wrong Selection. Use 0/1/2/3')
#         sys.exit(2)
#
#     fname = '/etc/sysconfig/network-scripts/ifcfg-eth%s' % if_ind
#     ip_addr = raw_input('ip address: ').strip()
#     result = check_ip(ip_addr)
#     if not result:
#         print ('Invalid ip address')
#         sys.exit(3)
#     configip(fname, ip_addr, if_ind)
#     print('\033[32;1mConfigure ip address done. Please execute "systemctl restart NetworkManager"\033[0m')
#
# if __name__ == '__main__':
#     show_menu()
#********************************
#模擬字符串lstrip用法
# whitesps = '\r\n\v\f\t'
#
# def rmlsps(astr):
#     for i in range(len(astr)):
#         if astr[i] not in whitesps:
#             return astr[i:]
#     else: #所有字符均爲空,循環正常結束,返回空串
#         return ''
#
# if __name__ == '__main__':
#     print(rmlsps('\thello'))
# whitesps = '\r\n\v\f\t'
#
# def rmrsps(astr):
#     for i in range(-1,-len(astr),-1): #自右向左 下標爲負
#         if astr[i] not in whitesps:
#             return astr[:i + 1]  #結束下表對應的字符不包含,所以加1
#         else:
#             return ''
#
# if __name__ == '__main__':
#     print(rmrsps(''))
#     print(rmrsps('\thello'))

# whitesps = ' \r\n\v\f\t'
#
# def rmrsps(astr):
#     for i in range(len(astr) - 1, -1, -1):
#         if astr[i] not in whitesps:
#             return astr[:i + 1]  # 結束下標對應的字符不包含,所以加1
#     else:
#         return ''
#
# if __name__ == '__main__':
#     print(rmrsps(''))
#     print(rmrsps('  \thello  '))
"""
我國古代數學家張丘建在《算經》一書中提出的數學問題:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?
思路:
1、答案不只一個
2、如果全是公雞i,最多100/5只
3、如果全是母雞j,最多100/3只
4、如果全是小雞k,100塊錢,可以買300只;但,所有的雞最多是100只
5、雞的數目i+j+k==100
6、雞的價錢i * 5 + j * 3 + k / 3 == 100

作者:凱茜的老爸
鏈接:https://www.jianshu.com/p/a915980dadd0
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
"""
# for i in range(100//5+1): #//表示只留商 不要小數 捨棄餘數
#     for j in range(100//3+1):
#         for k in range(100 + 1):
#             if i + j + k == 100 and i * 5+j*3+k/3 == 100:
#                 print('公雞:%s,母雞:%s,小雞:%s'% (i,j,k))

#fork子進程解析
# import os
#
# for i in range(3):
#     pid = os.fork()
#     if not pid:
#         print('hello')
#

#可變與不可變對象的效率
# from random import choice
# import string
#
# all_chs = string.ascii_letters + string.digits #大小寫字母加數字
#
# def gen_pass(n = 8):
#     result = []
#
#     for i in range(n):
#         ch =choice(all_chs)
#         result.append(ch)
#
#     return ''.join(result)
#
# if __name__ == '__main__':
#     print(gen_pass())
#     print(gen_pass(4))
#     print(gen_pass(10))

#************比較文件的差異
# import difflib
# import webbrowser
# import sys
# import string
# import os
# from random import choice
#
# def rand_chs(n=8): #默認生成8個隨機字符
#     all_chs = string.ascii_letters + string.digits
#     result = [choice(all_chs)for i in range(n)]
#     return ''.join(result)
#
# #函數接受連個相似的文件名,返回HTML形式的字符串
# def make_diff(lfile,rfile):
#     d = difflib.HtmlDiff()
#
#     #將兩個文件分別讀到列表中
#     with open(lfile) as fobj:
#         ldata = fobj.readlines()
#
#     with open(rfile) as fobj:
#         rdata = fobj.readlines()
#
#     return  d.make_file(ldata,rdata)
#
# if __name__ == '__main__':
#     try:
#         lfile = sys.argv[1]
#         rfile = sys.argv[2]
#     except IndexError:
#         print('Usage: %s file1 file2'% sys.argv[0])
#         sys.exit(1)
#     if not os.path.isfile(lfile):
#         print('No such file: ', lfile)
#         sys.exit(2)
#     if not os.path.isfile(rfile):
#         print('No such file: ', rfile)
#         sys.exit(3)
#     data  = make_diff(lfile,rfile)
#     #以下只是爲說明內容增加中文顯示,非必須項
#     data = data.replace(';Added', ';Added(增加)')
#     data = data.replace('>Changed', '>Changed(改變)')
#     data = data.replace('>Deleted', '>Deleted(被刪除)')
#     data = data.replace('(f)irst change', '(f)irst change【第一處變更】')
#     data = data.replace('(n)ext change', '(n)ext change【下一處變更】')
#     data = data.replace('(t)op', '(t)op【回到頂部】')
#     html_file = '/tmp/%s.html' % rand_chs()  # 用隨機字符生成文件名
#     with open(html_file, 'w') as fobj:
#         fobj.write(data)
#     webbrowser.open_new_tab('file:///%s' % html_file)  # 使用瀏覽器打開文件
#****************************

#進度條
"""
[root@room8pc16 ~]# vim /tmp/process_bar.py
from tqdm import tqdm
import time

for i in tqdm(range(10)):
    time.sleep(1)

[root@room8pc16 ~]# python3 /tmp/process_bar.py
30%|█████████████▏                              | 3/10 [00:03<00:07,  1.00s/it]
"""
#帶進度條的拷貝文件
# import  os
# import sys
# import tqdm import tqdm
#
# def copy(src_fname,dst_fname,length=4096):
#     size = os.stat(src_fname).st_size
#     times,extra = divmod(size,length)
#     if extra:
#         times += 1
#
#     with open(src_fname,'rb') as src_fobj:
#         with open(dst_fname,'wb') as dst_fobj:
#             for i in tqdm(range(times)):
#                 data = src_fobj.read(length)
#                 dst_fobj.write(data)
#
# if __name__ == '__main__':
#     copy(sys.argv[1],sys.argv[2])

#取出指定時間段的文本
# import time
#
# fname  = 'myfile.txt'
# t1 = time.strptime('2019-5-15 09:00:00', '%Y-%m-%d %H:%M:%S')
# t2 = time.strptime('2019-5-15 12:00:00', '%Y-%m-%d %H:%M:%S')
#
# with open(fname) as fobj:
#     for line in fobj:
#         t = time.strptime(line[:19],'%Y-%m-%d %H:%M:%S')
#         if t1 < t < t2:
#             print(line,end='')




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章