首页
关于
Search
1
git lg彩色显示日志
24 阅读
2
在 Ubuntu 22.04 LTS 中安装 Docker
19 阅读
3
CentOs/Ubuntu搭建上网x-ui
18 阅读
4
git使用多个源和多个分支
15 阅读
5
git保存账号密码
14 阅读
默认分类
网站搭建
Windows
Linux
Docker
OpenWrt
Hackintosh
Git
Python
Pandas
Web开发
JavaScript
FFmpeg
Demo
工具
刷机
油猴脚本
Excel
Chrome Extension
登录
Search
标签搜索
Pandas
读取
时区
Chrome
centos8
求和
Nginx
Typecho
404
csv
国际站
询盘导出
油猴脚本
bbr
Ubuntu
远程桌面
日志
log
数据清洗
打印机
野生程序猿
累计撰写
151
篇文章
累计收到
0
条评论
首页
栏目
默认分类
网站搭建
Windows
Linux
Docker
OpenWrt
Hackintosh
Git
Python
Pandas
Web开发
JavaScript
FFmpeg
Demo
工具
刷机
油猴脚本
Excel
Chrome Extension
页面
关于
搜索到
34
篇与
的结果
2022-12-08
Python下使用ssl自签证书的websockets
参考来源: 官方文档 客户端程序#!/usr/bin/env python import asyncio import pathlib import ssl import websockets ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) localhost_pem = pathlib.Path(__file__).with_name("localhost.pem") ssl_context.load_verify_locations(localhost_pem) async def hello(): uri = "wss://localhost:8765" async with websockets.connect(uri, ssl=ssl_context) as websocket: name = input("What's your name? ") await websocket.send(name) print(f">>> {name}") greeting = await websocket.recv() print(f"<<< {greeting}") if __name__ == "__main__": asyncio.run(hello())服务端程序#!/usr/bin/env python import asyncio import pathlib import ssl import websockets async def hello(websocket): name = await websocket.recv() print(f"<<< {name}") greeting = f"Hello {name}!" await websocket.send(greeting) print(f">>> {greeting}") ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) localhost_pem = pathlib.Path(__file__).with_name("localhost.pem") ssl_context.load_cert_chain(localhost_pem) async def main(): async with websockets.serve(hello, "localhost", 8765, ssl=ssl_context): await asyncio.Future() # run forever if __name__ == "__main__": asyncio.run(main())保存文件为localhost.pem-----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDG8iDak4UBpurI TWjSfqJ0YVG/S56nhswehupCaIzu0xQ8wqPSs36h5t1jMexJPZfvwyvFjcV+hYpj LMM0wMJPx9oBQEe0bsmlC66e8aF0UpSQw1aVfYoxA9BejgEyrFNE7cRbQNYFEb/5 3HfqZKdEQA2fgQSlZ0RTRmLrD+l72iO5o2xl5bttXpqYZB2XOkyO79j/xWdu9zFE sgZJ5ysWbqoRAGgnxjdYYr9DARd8bIE/hN3SW7mDt5v4LqCIhGn1VmrwtT3d5AuG QPz4YEbm0t6GOlmFjIMYH5Y7pALRVfoJKRj6DGNIR1JicL+wqLV66kcVnj8WKbla 20i7fR7NAgMBAAECggEAG5yvgqbG5xvLqlFUIyMAWTbIqcxNEONcoUAIc38fUGZr gKNjKXNQOBha0dG0AdZSqCxmftzWdGEEfA9SaJf4YCpUz6ekTB60Tfv5GIZg6kwr 4ou6ELWD4Jmu6fC7qdTRGdgGUMQG8F0uT/eRjS67KHXbbi/x/SMAEK7MO+PRfCbj +JGzS9Ym9mUweINPotgjHdDGwwd039VWYS+9A+QuNK27p3zq4hrWRb4wshSC8fKy oLoe4OQt81aowpX9k6mAU6N8vOmP8/EcQHYC+yFIIDZB2EmDP07R1LUEH3KJnzo7 plCK1/kYPhX0a05cEdTpXdKa74AlvSRkS11sGqfUAQKBgQDj1SRv0AUGsHSA0LWx a0NT1ZLEXCG0uqgdgh0sTqIeirQsPROw3ky4lH5MbjkfReArFkhHu3M6KoywEPxE wanSRh/t1qcNjNNZUvFoUzAKVpb33RLkJppOTVEWPt+wtyDlfz1ZAXzMV66tACrx H2a3v0ZWUz6J+x/dESH5TTNL4QKBgQDfirmknp408pwBE+bulngKy0QvU09En8H0 uvqr8q4jCXqJ1tXon4wsHg2yF4Fa37SCpSmvONIDwJvVWkkYLyBHKOns/fWCkW3n hIcYx0q2jgcoOLU0uoaM9ArRXhIxoWqV/KGkQzN+3xXC1/MxZ5OhyxBxfPCPIYIN YN3M1t/QbQKBgDImhsC+D30rdlmsl3IYZFed2ZKznQ/FTqBANd+8517FtWdPgnga VtUCitKUKKrDnNafLwXrMzAIkbNn6b/QyWrp2Lln2JnY9+TfpxgJx7de3BhvZ2sl PC4kQsccy+yAQxOBcKWY+Dmay251bP5qpRepWPhDlq6UwqzMyqev4KzBAoGAWDMi IEO9ZGK9DufNXCHeZ1PgKVQTmJ34JxmHQkTUVFqvEKfFaq1Y3ydUfAouLa7KSCnm ko42vuhGFB41bOdbMvh/o9RoBAZheNGfhDVN002ioUoOpSlbYU4A3q7hOtfXeCpf lLI3JT3cFi6ic8HMTDAU4tJLEA5GhATOPr4hPNkCgYB8jTYGcLvoeFaLEveg0kS2 cz6ZXGLJx5m1AOQy5g9FwGaW+10lr8TF2k3AldwoiwX0R6sHAf/945aGU83ms5v9 PB9/x66AYtSRUos9MwB4y1ur4g6FiXZUBgTJUqzz2nehPCyGjYhh49WucjszqcjX chS1bKZOY+1knWq8xj5Qyg== -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAOjte6l+03jvMA0GCSqGSIb3DQEBCwUAMEwxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHDAVQYXJpczEZMBcGA1UECgwQQXltZXJpYyBBdWd1c3Rp bjESMBAGA1UEAwwJbG9jYWxob3N0MCAXDTE4MDUwNTE2NTkyOVoYDzIwNjAwNTA0 MTY1OTI5WjBMMQswCQYDVQQGEwJGUjEOMAwGA1UEBwwFUGFyaXMxGTAXBgNVBAoM EEF5bWVyaWMgQXVndXN0aW4xEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAMbyINqThQGm6shNaNJ+onRhUb9LnqeGzB6G 6kJojO7TFDzCo9KzfqHm3WMx7Ek9l+/DK8WNxX6FimMswzTAwk/H2gFAR7RuyaUL rp7xoXRSlJDDVpV9ijED0F6OATKsU0TtxFtA1gURv/ncd+pkp0RADZ+BBKVnRFNG YusP6XvaI7mjbGXlu21emphkHZc6TI7v2P/FZ273MUSyBknnKxZuqhEAaCfGN1hi v0MBF3xsgT+E3dJbuYO3m/guoIiEafVWavC1Pd3kC4ZA/PhgRubS3oY6WYWMgxgf ljukAtFV+gkpGPoMY0hHUmJwv7CotXrqRxWePxYpuVrbSLt9Hs0CAwEAAaMwMC4w LAYDVR0RBCUwI4IJbG9jYWxob3N0hwR/AAABhxAAAAAAAAAAAAAAAAAAAAABMA0G CSqGSIb3DQEBCwUAA4IBAQC9TsTxTEvqHPUS6sfvF77eG0D6HLOONVN91J+L7LiX v3bFeS1xbUS6/wIxZi5EnAt/te5vaHk/5Q1UvznQP4j2gNoM6lH/DRkSARvRitVc H0qN4Xp2Yk1R9VEx4ZgArcyMpI+GhE4vJRx1LE/hsuAzw7BAdsTt9zicscNg2fxO 3ao/eBcdaC6n9aFYdE6CADMpB1lCX2oWNVdj6IavQLu7VMc+WJ3RKncwC9th+5OP ISPvkVZWf25rR2STmvvb0qEm3CZjk4Xd7N+gxbKKUvzEgPjrLSWzKKJAWHjCLugI /kQqhpjWVlTbtKzWz5bViqCjSbrIPpU2MgG9AUV9y3iV -----END CERTIFICATE-----
2022年12月08日
3 阅读
0 评论
0 点赞
2022-12-06
Selenium操作Chrome
import os,platform,time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver import ChromeOptions sys_platform = platform.platform().lower() if "windows" in sys_platform: binary_location = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" executable_path = "C:\\chromedriver.exe" user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36' elif "macos" in sys_platform: binary_location = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" executable_path = os.path.expanduser('~') + '/Documents/chromedriver' user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36' defaults = './Profile' option = ChromeOptions() option.binary_location = binary_location option.add_experimental_option('useAutomationExtension', False) option.add_experimental_option("excludeSwitches", ['enable-automation']) option.add_argument('--lang=zh-cn') option.add_argument('--disable-translate') option.add_argument(f'--window-position={100},{100}') option.add_argument(f'--user-data-dir={defaults}') option.add_argument(f'user-agent={user_agent}') option.add_argument('--disable-gpu') option.add_argument('--ignore-certificate-errors') option.add_argument('--ignore-ssl-errors') bro = webdriver.Chrome(executable_path=executable_path,options=option) bro.set_window_size(1024,768) bro.implicitly_wait(8) bro.get('https://www.baidu.com/') time.sleep(5) bro.close() bro.quit()
2022年12月06日
2 阅读
0 评论
0 点赞
2022-10-30
使用snapshot_phantomjs保存pyecharts为图片
1.安装python库pip3 install snapshot_phantomjs2.安装phantomjs 官网地址 下载对应操作系统的版本,并复制到系统环境路径下#查看是否安装成功 phantomjs --version3.因网络环境问题报错,File "/root/snapshot-phantomjs_test.py", line 19, in <module> make_snapshot(snapshot, bar_chart().render(), "bar0.png") File "/usr/local/lib/python3.9/site-packages/pyecharts/render/snapshot.py", line 45, in make_snapshot raise OSError(content_array) OSError: ["ReferenceError: Can't find variable: echarts\n\n file:////root/render.html:12 in global code\nReferenceError: Can't find variable: echarts\n\n undefined:1\nnull\n"]则需要下载所需js:wget https://assets.pyecharts.org/assets/echarts.min.js4.测试案例from pyecharts import options as opts from pyecharts.charts import Bar from pyecharts.render import make_snapshot from snapshot_phantomjs import snapshot file_path = "{}/".format(os.path.dirname(os.path.abspath("/root/echarts.min.js"))) def bar_chart() -> Bar: c = ( Bar(init_opts=opts.InitOpts(js_host=file_path)) .add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"]) .add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105]) .add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49]) .reversal_axis() .set_series_opts(label_opts=opts.LabelOpts(position="right")) .set_global_opts(title_opts=opts.TitleOpts(title="Bar-测试渲染图片")) ) return c make_snapshot(snapshot, bar_chart().render(), "bar0.png")
2022年10月30日
1 阅读
0 评论
0 点赞
2022-10-21
Pandas保留小数或取整
1.round(n)方法四舍五入# 全部列 df = df.round(2) # 指定列 df.round({'dogs':2, 'cats':1})2.取整# 指定列 dfs['A'] = dfs['A'].astype('int') # 全部列 dfs = dfs.astype('int')
2022年10月21日
1 阅读
0 评论
0 点赞
2022-10-19
Python统计时间段频次demo
import datetime import pandas as pd # from pprint import pprint from pytz import timezone,all_timezones fmt = "%Y-%m-%d %H:%M:%S %Z%z" # Current time in UTC now_utc = datetime.datetime.now(timezone('UTC')) print(now_utc.strftime(fmt)) # Convert to US/Pacific time zone now_pacific = now_utc.astimezone(timezone('US/Pacific')) print(now_pacific.strftime(fmt)) now_pabeijing = now_utc.astimezone(timezone('Asia/Shanghai')) print(now_pabeijing.strftime(fmt)) # for zone in all_timezones: # if 'Asia' in zone: # print(zone) def get_loacl(x): if type(x['时间']) == str: time_str = x['日期']+' '+x['时间'] dt = datetime.datetime.strptime(time_str,'%Y/%m/%d %H:%M PDT') dt = timezone('US/Pacific').localize(dt) dt_beijing = dt.astimezone(timezone('Asia/Shanghai')) print(time_str,dt,dt_beijing) return dt_beijing else: return x['时间'] def calc_hours(df): # 生成24小时时间段 times = [] for i in range(24): times.append({'时间段': '{0}时'.format(i), 'section': (i, i + 1), '计数': 0}) # 处理带PDT的时间 df['hours'] = df.apply(lambda x: datetime.datetime.strptime(x['日期']+x['时间'],'%Y/%m/%d%H:%M PDT') if type(x['时间']) == str else x['时间'],axis=1) df['locals'] = df.apply(lambda x: get_loacl(x),axis=1) print(df) # 循环统计 for i,r in df.iterrows(): for tx in times: if tx['section'][0] <= r['locals'].hour < tx['section'][1]: tx['计数'] = tx['计数'] + 1 break # 转为dataframe dt = pd.DataFrame(times).drop(['section'],axis=1) return dt df = pd.read_excel('./亚马逊订单2022-10-19.xlsx',usecols=['日期','时间'],sheet_name='订单详情') d = calc_hours(df) print(d)import datetime import random # 生成随机测试时间数量 from pprint import pprint SAMPLE_COUNT = 10 SECTION = 'section' SUM = 'sum' def my_time(): times = [] for i in range(24): times.append({SECTION: (i, i + 1), SUM: 0}) cnt = 0 while True: h = random.randint(0, 23) m = random.randint(0, 59) t = datetime.time(hour=h, minute=m) for tx in times: if tx[SECTION][0] <= t.hour < tx[SECTION][1]: tx[SUM] = tx[SUM] + 1 pprint(f'{t.strftime("%H:%M")} @ {tx[SECTION]}') break cnt = cnt + 1 if cnt > SAMPLE_COUNT: break return times if __name__ == '__main__': timex = my_time() pprint(timex)
2022年10月19日
2 阅读
0 评论
0 点赞
1
...
3
4
5
...
7