Python个人编程笔记

SQLite数据库操作: 

初始化数据库文件

def init_db():
	if not os.path.exists("A.db"):
		conn = sqlite3.connect("A.db")
		c = conn.cursor()
		sql = """CREATE TABLE A(A TEXT, 
								B TEXT,
								C TEXT,
								D TEXT,
								E TEXT,
								F TEXT,
								G TEXT,
								H TEXT,
								I TEXT,
								J TEXT,
								K TEXT);"""
		c.execute(sql)
		conn.commit()
		conn.close()

 每插入一次数据就提交一次事务:

def insert_L_to_db(d: dict):
	""" Insert L to database. Selected database: SQLite.
				@:param d Dict
					D
		"""
	conn = sqlite3.connect("D.db")
	c = conn.cursor()
	sql = """INSERT INTO A VALUES (?,?,?,?,?,?,?,?,?,?,?)"""
	tup = (d["a"], d["b"], d["c"], d["d"], d["e"], d["f"], d["g"], d["h"], d["i"], d["j"], d["k"])
	c.execute(sql, tup)
	conn.commit()
	conn.close()

字符串格式化

logcat("{schoolName}-{deptName} ".format(schoolName=school['name'], deptName=dept['name']))

彩色等级化Print_Logger

import colorama
colorama.init(autoreset=True)

def logcat(log_level, log):
	clock = time.strftime("%Y-%m-%d %H:%M:%S")
	print("[%s]" % clock, end=" ")
	if log_level == '-':
		print("\033[0;31;40m%s\033[0m" % ("[{level}] - {log}".format(level=log_level, log=log)))
	elif log_level == '+':
		print("\033[0;32;40m%s\033[0m" % ("[{level}] - {log}".format(level=log_level, log=log)))
	elif log_level == '!':
		print("\033[0;33;40m%s\033[0m" % ("[{level}] - {log}".format(level=log_level, log=log)))
	elif log_level == "#":
		print("\033[0;34;40m%s\033[0m" % ("[{level}] - {log}".format(level=log_level, log=log)))
	else:
		print("\033[0;37;40m%s\033[0m" % ("[{level}] - {log}".format(level=log_level, log=log)))


处理HTML: BeautifulSoup

soup = BeautifulSoup(r.content.decode("utf-8"), "lxml")
d["aaa"] = soup.findAll(name="td", attrs={"id": "abab"})
d["bbb"] = soup.findAll(name="span", attrs={"id": "baba"})
for k, v in d.items():
	l = list(map(lambda o: o.get_text(), v))
	d[k] = l
	# assert len(l) == 1
	# d[k] = l[0]

base64.b64decode: Incorrect padding

def decode_base64(data, is_url_safe=False):
    """Decode base64, padding being optional.
    :param data: Base64 data as an ASCII byte string
    :returns: The decoded byte string.
    """
    missing_padding = len(data) % 4
    if missing_padding != 0:
        data += b'=' * (4 - missing_padding)
    return base64.decodestring(data) if not is_url_safe else base64.urlsafe_b64decode(data)

 

Incorrect padding错误

谷歌找到答案 ,说是有可能去掉了编码后的等号,可以手动加上,解决方式如下:

def decode_base64(data):
    """Decode base64, padding being optional.

    :param data: Base64 data as an ASCII byte string
    :returns: The decoded byte string.

    """
    missing_padding = len(data) % 4
    if missing_padding != 0:
        data += b'='* (4 - missing_padding)
    return base64.decodestring(data)
我试了试,其实还是同样的错误,看来并不是等号的问题。


继续尝试,又有人说可能是末尾多了字符,可尝试去掉,方法如下:

lens = len(strg)
lenx = lens - (lens % 4 if lens % 4 else 4)
try:
    result = base64.decodestring(strg[:lenx])
except etc
我又试了试,还是不行~看来也不是这个问题


再往下看,看到了这个

Update 2: It is possible that the encoding has been done in an url-safe manner. If this is the case, you will be able to see minus and underscore characters in your data, and you should be able to decode it by using base64.b64decode(strg, '-_')

意思是如果你解码的是url(咦,我就是处理url),可以这么尝试

base64.b64decode(strg, '-_')
试了一下,然也。


那么为什么会出现这种情况呢?继续查看原因,终于找到了:

由于标准的Base64编码后可能出现字符+和/,在URL中就不能直接作为参数,所以又有一种"url safe"的base64编码,其实就是把字符+和/分别变成-和_:

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431954588961d6b6f51000ca4279a3415ce14ed9d709000

然后,我们这个问题又有另外一个解决方式了:

base64.urlsafe_b64decode(base64_url)

 

おすすめ

転載: blog.csdn.net/uiop_uiop_uiop/article/details/110382992
おすすめ