本文『很傻很天真』,熟悉Python的人都不用看了。另外本文的部分内容已经过时,请视情况忽略。
环境:未特别注明的话为Python 3.2.3,特别注明了的话则为注明的版本。
▶▶ Python访问MySQL
听说很多人都使用著名的MySQLdb来访问MySQL,但是它并不支持Python 3.x的版本。所以要另寻出路。那就是mysql-connector-python,它是MySQL官方提供的,并且它不依赖于MySQL C客户端library
文章来源:http://www.codelast.com/
下面给出一段查询MySQL记录的示例代码:
import mysql.connector
import sys
__author__ = 'codelast'
username = 'root'
password = 'xxx'
host = '127.0.0.1'
db = 'mydb'
connection = mysql.connector.connect(user=username, password=password, host=host, database=db)
cursor = connection.cursor()
sql = "SELECT * FROM my_table WHERE id = 9"
try:
cursor.execute(sql)
# 打印查询到的记录的行数
data = cursor.fetchall()
print(len(data))
# 输出所有记录
for (ID, name) in data:
print("name:[%s]" % (name))
except mysql.connector.Error as err:
print("Failed to query table, detail: {}".format(err.msg))
sys.exit()
connection.commit()
cursor.close()
connection.close()
上面的代码很简单,无非就是从my_table表里查询一些记录,再打印出来。
注意 for (ID, name) 中的括号里要写全该表中,你查询的所有字段名,否则会报错。还有其他遍历查询结果的方法,后面会继续陈述。
▶▶ 逆序遍历list
myList = [1, 2, 3]
for item in reversed(myList):
print(item)
输出:
3
2
1
注意是 reversed 不是 reverse。这只是逆序遍历,myList中的数据顺序并不会改变。
文章来源:http://www.codelast.com/
▶▶ 使用MySQLdb访问数据库时,“TypeError: execute() takes at most 3 arguments (4 given)”错误的解决办法
Python版本:2.7.3
使用2.7.3版本的Python时,访问MySQL的最佳方案应该数使用MySQLdb了。
如果在执行SQL时,你遇到了上面所说的问题,那么你可能是像下面这样写导致的:
sql = "INSERT INTO my_table (field1, field2) VALUES (%s, %s)"
cursor.execute(sql, "a", "b")
这是错误的,其实根本不是这样用的,当参数多于一个时,你要把它们放在一个tuple里传进去:
sql = "INSERT INTO my_table (field1, field2) VALUES (%s, %s)"
cursor.execute(sql, ("a", "b"))
例如这个链接有个例子。
▶▶ 使用 lxml 库生成XML(字符串)
Python版本:2.7.3
直接看代码:
#coding:UTF-8
"""
XML生成器。文件名:xmlGenerator.py
"""
__author__ = 'Darran Zhang @ codelast.com'
from lxml import etree
class XMLGenerator:
def __init__(self):
pass
def generate_xml(self):
commands = etree.Element('Commands')
command = etree.SubElement(commands, 'Command')
from_user = etree.SubElement(command, 'FromUser')
from_user.text = u'abc'
cmd = etree.SubElement(command, 'Cmd')
cmd.text = u'mmmmmmmmmmmmmm'
cmd_extra_data = etree.SubElement(command, 'CmdExtraData')
cmd_extra_data.text = u'eeeeeeeeee'
return etree.tostring(commands, pretty_print=True, xml_declaration=True, encoding='utf-8')
测试代码:
from xmlGenerator import XMLGenerator
xmlGen = XMLGenerator()
print(xmlGen.generate_xml())
测试代码:
from xmlGenerator import XMLGenerator
xmlGen = XMLGenerator()
print(xmlGen.generate_xml())
输出:
<?xml version='1.0' encoding='utf-8'?>
<Commands>
<Command>
<FromUser>abc</FromUser>
<Cmd>mmmmmmmmmmmmmm</Cmd>
<CmdExtraData>eeeeeeeeee</CmdExtraData>
</Command>
</Commands>
可见非常简单。
▶▶ 对一个字典(dict),按value进行排序
Python版本:2.6.6,2.6.9均测试可用(Python3里没有cmp方法了,所以不能用)
sortedList = sorted(myDict.items(), lambda x, y: cmp(x[1], y[1]), reverse=True)
for (k, v) in sortedList:
print("{0}\t{1}".format(k,v))
其中,myDict是你要将其排序的字典,sortedList是排序之后的结果,变成了一个list,里面是若干个tuple,每个tuple里是一对(key,value),所以后面用那样的方式对它进行了遍历。
文章来源:http://www.codelast.com/
▶▶ Python正则简单示例
先看代码:
code = 'String url = "http://item.jd.com/1148104.html?erpad_source=abc";'
pattern = re.compile('.*\"(.*)\"')
match = pattern.match(code)
if match:
print(match.group(1))
输出:
http://item.jd.com/1148104.html?erpad_source=abc
说明:上面的代码是想把字符串“code”中的双引号里的那个URL打印出来。正则表达式 .*\"(.*)\" 中的小括号就是第1个group,匹配上的话可以用 group(1) 获取之。
▶▶ 循环一个日期段
Python版本:3.6.8
循环打印出 2019-07-29 ~ 2019-08-05 的日期:
import datetime
def loop_date():
begin = datetime.date(2019, 7, 29)
end = datetime.date(2019, 8, 5)
for i in range((end - begin).days + 1):
day_str = str(begin + datetime.timedelta(days=i))
print(day_str)
if __name__ == '__main__':
loop_date()
输出:
2019-07-292019-07-302019-07-312019-08-012019-08-022019-08-032019-08-042019-08-05
文章来源:http://www.codelast.com/
▶▶ 以 yyyy-MM-dd HH:mm:ss 格式打印出当前时间
Python版本:3.6.8
import time
print(time.strftime("%Y-%m-%d %H:%M:%S"))
▶▶ 写MySQL
Python版本:3.6.8
在Anaconda下安装MySQLdb,会同时安装上的依赖包太多了,所以我转而使用 pymsql 来写MySQL:
conda install -c anaconda pymysql
之后的Python程序就非常简单了:
(1)连接MySQL
db = pymysql.connect("127.0.0.1", "root", "my_password", "my_db_name", charset='utf8')
(2)向MySQL写数据
cursor = db.cursor()sql = "xxx" # 必须为合法的SQL语句cursor.execute(sql)db.commit()
文章来源:http://www.codelast.com/
▶▶ set的 type hint 怎么写
Python版本:3.6.9
直接看代码:
from typing import Set def type_hint_of_set() -> Set[int]: a = set() a.add(2) a.add(5) a.add(8) a.add(2) return a b = type_hint_of_set() print(type(b)) print(b)
输出:
<class 'set'>{8, 2, 5}
文章来源:http://www.codelast.com/
▶▶ 用阿里镜像为 pip install 命令加速
创建文件 ~/.pip/pip.conf
添加以下内容:
[global]index-url = http://mirrors.aliyun.com/pypi/simple/[install]trusted-host=mirrors.aliyun.com
再使用 pip install 就会体验到飞一般的感觉。
▶▶ 使用 f string 格式化字符串时控制小数位数
Python版本:3.6.9
a: float = 32.67890123 print(f'{a:.2f}')
输出:
32.68
其中,.2表示小数点后保留两位小数。如果不加“f”,则输出变成了科学计数法:
3.3e+01
▶▶ 获取当前用户的home目录
Python版本:3.6.9
from pathlib import Path home_dir = str(Path.home()) print(home_dir)
输出:
Mac下类似于:/Users/codelast
Linux下类似于:/home/codelast
▶▶ 计算分位数
输入文件 1.txt 一行为一个数,要看一下它们的分布情况(输入文件中的数据顺序不会影响输出结果):
import numpy as np
file = open('/home/codelast/1.txt')
list1 = []
for line in file:
list1.append(int(line.strip()))
a = np.array(list1)
print(np.percentile(a, 0))
print(np.percentile(a, 10))
print(np.percentile(a, 20))
print(np.percentile(a, 30))
print(np.percentile(a, 40))
print(np.percentile(a, 50))
print(np.percentile(a, 60))
print(np.percentile(a, 70))
print(np.percentile(a, 80))
print(np.percentile(a, 90))
print(np.percentile(a, 100))
输出:
1.03.04.05.06.07.09.014.021.042.03572.0
这表示:有0%的值<1.0(或者说所有值都>=1.0),10%的值<3.0,20%的值<4.0,...,100%的值<=3572。
文章来源:https://www.codelast.com/
➤➤ 版权声明 ➤➤
转载需注明出处:codelast.com
感谢关注我的微信公众号(微信扫一扫):