标题 |
创建时间 |
发布时间 |
最后一次修改 |
备注 |
Python 常见问题速查 |
2020.08.04 |
2020.12.21 |
2021.03.30 |
/ |
获取日期参数输入,或者默认日期
import sys
import time
if len(sys.argv)==2:
today = sys.argv[1]
else:
today = time.strftime("%Y-%m-%d", time.localtime())
日期加减操作
from datetime import datetime, timedelta
def date_transfer(today):
today = datetime.strptime(today, "%Y-%m-%d")
yesterday = today - timedelta(days=1)
return today.strftime( "%Y-%m-%d"),yesterday.strftime( "%Y-%m-%d")
对list元素进行判断
# source: https://thispointer.com/python-count-elements-in-a-list-that-satisfy-certain-conditions/
listOfElems = [11, 22, 33, 45, 66, 77, 88, 99, 101]
# count numbers in the list which are greater than 5
count = sum(map(lambda x : x>5, listOfElems)) # lambda 函数可替换
print('Count of numbers in a list which are greater than 5: ', count)
str类型的array转array
def str2array(current_str):
'''
返回数值数组
'''
current_array = current_str.replace(']','').replace('[','').replace('"','').split(",")
current_array = np.array(current_array)
return [int(numeric_string) for numeric_string in current_array]
current_str = '["1","2"]'
str2array(current_str)
>>> [1, 2]
python 取整
# refer: http://kuanghy.github.io/2016/09/07/python-trunc
import math
# 向上取整
math.ceil(2.25)
>>> 3
# 向下取整
int(3.4)
>>> 3
math.floor(2.75)
>>> 2
# 特别注意⚠️ round 取整
round(3.5)
>>> 4
round(2.5)
>>> 2
# 为何会这样:是为了保证整体分布和均值不变。如果每遇*.5进一,则整体均值会上移,带来误差。
HMAC SHA256 加密
# refer: https://www.gauravvjn.com/generate-hmac-sha256-signature-in-python/
import hmac
import hashlib
import binascii
def create_sha256_signature(key, message):
byte_key = binascii.unhexlify(key)
message = message.encode()
return hmac.new(byte_key, message, hashlib.sha256).hexdigest().upper()
create_sha256_signature("E49756B4C8FAB4E48222A3E7F3B97CC3", "TEST STRING")
str类型的dict转dict
# refer: https://stackoverflow.com/questions/988228/convert-a-string-representation-of-a-dictionary-to-a-dictionary
s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"
import ast
ast.literal_eval(s)
>>> {'muffin': 'lolz', 'foo': 'kitty'}
list 两两配对 pairwise
# refer: https://stackoverflow.com/questions/40092474/get-all-pairwise-combinations-from-a-list
import itertools
x = [1,2,3,4]
list(itertools.combinations(x, 2))
>>> [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
list count item
# https://stackoverflow.com/questions/2600191/how-can-i-count-the-occurrences-of-a-list-item
l = ["a","b","b"]
from collections import Counter
Counter(l)
>>> Counter({'b': 2, 'a': 1})
读取 txt 文本文件
# https://stackoverflow.com/questions/8369219/how-to-read-a-text-file-into-a-string-variable-and-strip-newlines
with open('data.txt', 'r') as file:
data = file.read().replace('\n', '')
每 n 个距离截断 string
# https://stackoverflow.com/questions/9475241/split-string-every-nth-character
line = '1234567890'
n = 2
[line[i:i+n] for i in range(0, len(line), n)]
>>> ['12', '34', '56', '78', '90']
OptionParser 获取命令行参数
# http://www.ttlsa.com/python/python-optionparser-usage/
# https://docs.python.org/3/library/optparse.html
from optparse import OptionParser
...
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout")
(options, args) = parser.parse_args()
从链接中下载数据
# https://stackoverflow.com/questions/22676/how-to-download-a-file-over-http
# https://www.tutorialspoint.com/downloading-files-from-web-using-python
import requests
url = 'https://www.facebook.com/favicon.ico'
r = requests.get(url, allow_redirects=True)
s = r.content
open('facebook.ico', 'wb').write(s)
# pandas 读取
# pd.read_csv(io.StringIO(s.decode('utf-8')),header=None)
时间戳差值
def timestamp_diff(x,y):
'''
x:后值
y:前值
'''
dt1 = datetime.utcfromtimestamp(x)
dt2 = datetime.utcfromtimestamp(y)
return (dt1 - dt2).days
小时差
# https://www.jianshu.com/p/4600c119051b
# https://www.programminghunter.com/article/3233584997/
from datetime import datetime,timedelta
def dateDiffInHours(t1, t2):
td = t2 - t1
return td.days * 24 + td.seconds/3600
a1='2017-10-04 09:01:04'
a2='2017-10-05 10:02:50'
t1=datetime.strptime(a1, "%Y-%m-%d %H:%M:%S")
t2=datetime.strptime(a2, "%Y-%m-%d %H:%M:%S")
dateDiffInHours(t1, t2)
运行时间统计
# https://stackoverflow.com/questions/1557571/how-do-i-get-time-of-a-python-programs-execution
import time
start_time = time.time()
main()
print("--- %s seconds ---" % (time.time() - start_time))
运行内存统计
# https://juejin.cn/post/6844904201621864461
import tracemalloc
tracemalloc.start()
my_complex_analysis_method()
current, peak = tracemalloc.get_traced_memory()
print(f"Current memory usage is {current / 10**6}MB; Peak was {peak / 10**6}MB")
tracemalloc.stop()
关于作者