Python 常用代码

[TOC]

标准

I/O

1
2
3
4
5
str1 = raw_input("请输入:") # 返回一个字符串,没有换行符
str2 = input("请输入:") # 可以接收一个Python表达式
print(str1, str2)
print("%s %s" % (str1, str2))
print("{} {}".format(str1, str2))

命令行

1
2
import sys
print(sys.argv)

文件通配符

1
2
import glob
print(glob.glob('*.py'))

程序后台挂起

1
2
3
4
5
6
7
nohup python -u xxx.py >log 2>&1 &
# nohup 是 no hang up 的缩写,即不挂断,退出账户,进程不结束。关闭了标准输入,终端不再能够接收任何输入。
# & 是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出。当关闭xshell,对应的任务也跟着停止。
# -u参数 强制其标准输出也同标准错误一样不通过缓存直接打印
# 0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出)。
# 0 是 < 的默认值,因此 < 与 0<是一样的;同理,> 与 1> 是一样的
# > 是重写文件,>> 是文件追加

读写文件

一般格式

1
2
3
4
5
6
with open("xxx", "r", encoding="utf-8") as fr:  # 读,"a"是追加,"+"可读可写
for line in fr:
# ...

with open("xxx", "w", encoding="utf-8") as fw: # 写
# ...

json格式

1
2
3
4
5
6
7
import json
with open("xxx", "r", encoding="utf-8") as fr: # 读
data = json.loads(fr.read())

with open("xxx", "w", encoding="utf-8") as fw: # 写
json.dump(json_obj, fw, ensure_ascii=False, indent=4)
fw.write(json.dumps(json_obj, ensure_ascii=False, indent=4) + "\n") # 或

文件/文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import os
path = os.getcwd() # path = "."
file_list = os.listdir(path)
for file in file_list:
file_path = os.path.join(path, file)

os.path.isdir(file_path): # ... 是目录?
os.path.isfile(file_path): # ... 是文件?
os.remove(file_path) # 删除文件
os.removedirs(dir) # 删除多个目录file_path
os.rename(old, new) # 重命名
os.path.exists(dir) # 判断文件/目录是否存在
os.makedirs(dir) # 多层创建目录
os.makedir(dir) # 创建一层目录

日期时间

1
2
3
import time
localtime = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime())
print(localtime) # 2020-04-19-13-59-46

xls表格读写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import xlrd
def read_excel():
workbook = xlrd.open_workbook('xxx.xls') # 打开excel表格文件
sheet_list = workbook.sheet_names() # 获取所有sheet
print(sheet_list)
sheet1 = workbook.sheet_by_name(sheet_list[0]) # 获取其中一张sheet
print(sheet1.cell_value(1, 2)) # 获取某行某列的值
print(sheet1.cell(1, 2).value) # 获取某行某列的值
print(sheet1.name, sheet1.nrows, sheet1.ncols) # 名称、行数、列数

total = 0 # 统计总行数
for si in sheet_list: # 遍历每个sheet
sheet_i = workbook.sheet_by_name(si) # 根据sheet名称获取sheet内容
for i in range(sheet_i.nrows): # 遍历sheet的每一行
print(sheet_i.row_values(i)) # 获取第i行
# sheet_i.col_values(k) # 获取第k列
total += 1
print(total)

1
2
3
4
5
6
7
import xlwt
workbook = xlwt.Workbook(encoding = 'utf-8') # 创建一个worksheet
sheet1 = workbook.add_sheet("sheet1") # 创建一个sheet1
sheet1.write(0, 0, "a") # (0, 0) 位置
sheet2 = workbook.add_sheet("sheet1") # 创建一个sheet2
sheet2.write(1, 0, "b") # (1, 0) 位置
workbook.save("xxx.xls") # 保存

xlsx表格读写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# openpyxl 行列都是从1开始
import openpyxl
def read_excel():
workbook = openpyxl.load_workbook('xxx.xlsx') # 打开excel表格文件
sheet_list = workbook.sheetnames # 获取所有sheet
print(sheet_list)
sheet0 = workbook[sheet_list[0]] # 获取其中一张sheet
print(sheet0.cell(1, 2).value) # 获取某行某列的值
print(sheet0.max_row, sheet0.max_column) # 行数、列数

total = 0 # 统计总行数
for si in sheet_list: # 遍历每个sheet
sheet_i = workbook[si] # 根据sheet名称获取sheet内容
for row in sheet_i.rows: # 遍历sheet的每一行
print(row[0].value) # 获取第i行
# sheet_i.col_values(k) # 获取第k列
total += 1
print(total)

1
2
3
4
5
6
7
import openpyxl
workbook = openpyxl.Workbook() # 创建一个worksheet
sheet1 = workbook.create_sheet("sheet1") # 创建一个sheet1
sheet1.cell(1, 1, "a") # (1, 1) 位置
sheet2 = workbook.create_sheet("sheet2") # 创建一个sheet2
sheet2.cell(1, 1, "b") # (1, 1) 位置
workbook.save("xxx.xlsx") # 保存

图片读写缩放

1
2
3
4
5
6
7
8
9
10
# pip install pillow
from PIL.Image import Image
img = Image.open('1.jpg')
# img.convert('RGB') # 保存成jpg
print(img.size) # 获取图像的大小
scale = 0.5
width = int(img.size[0]*scale)
height = int(img.size[1]*scale)
img = img.resize((width, height), Image.ANTIALIAS)
img.save('2.png')

正则表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import re
pattern = "[a-zA-Z]+"
string= "abcde12345fgh"
new_str = re.escape(string) # 不转义

res = re.match(pattern, string, flags=0) # 查看 string 是否以 pattern 开头
print(res.group()) # 不为None,则返回匹配到的 pattern 部分 "abcde"
res = re.fullmatch(pattern, string, flags=0) # 不完全匹配,返回None

res= re.search(pattern, string, flags=0) # 从任意位置匹配,只返回第一个匹配的结果
print(res.group())

res = re.findall(pattern, string) # 返回所有匹配的结果,list形式
res = re.finditer(pattern, string, flags=0) # 同上,迭代器返回
for match in res:
print(match.group())
print(match.span())

res = re.sub(pattern, "#", string, count=0, flags=0) # string中匹配pattern的部分,替换为"#"
res = re.split(pattern, string, maxsplit=0, flags=0) # 以pattern分割string,list形式

随机

随机数

1
2
3
4
5
6
7
8
import random
random.randint(0, 10) # [0, 10)的整数
random.random() # [0, 1)的浮点数
random.uniform(0,10) # [0, 10)的浮点数
random.randrange(0, 10, 2) # 间隔为2的列表中随机挑选一个
random.choice([0, 1, 2, 3]) # 随机挑选一个
random.choices([0, 1, 2, 3], 3) # 随机挑选3个(有重复)
random.sample([0, 1, 2, 3], 3) # 随机挑选3个(不重复)

随机划分

1
2
3
4
5
6
7
from sklearn.model_selection import train_test_split
d = [i for in range(10)]
x_train, x_test = train_test_split(d, test_size=0.2, random_state=58)
print(x_train)
print(x_test)

# 或者数据随机打乱后,切片

随机打乱数据

1
2
3
4
5
6
7
8
9
10
11
12
import random
a = [1, 2, 3, 4]
random.seed(58)
random.shuffle(a)
print(a) # 不保留原始

import numpy as np
b = [1, 2, 3, 4]
b = np.array(b)
idx = np.random.permutation(len(b))
c = b[idx]
print(c) # 保留原始

保留小数

1
2
3
4
f = 1.23456
print('%.4f' % f)
print(format(f, '.4f'))
print(round(f, 4))

数据库

MySQL

1
2
3
4
5
6
7
8
import pymysql
read_con = pymysql.connect(host="localhost", user='root', password='mysql', database='db_name', charset='utf8mb4')
cur = read_con.cursor()
sql = "select * from tb_name;"
cur.execute(sql)
data = cur.fetchall()
cur.close()
read_con.close()

PostgreSQL

1
2
3
4
5
6
7
8
import psycopg2
conn = psycopg2.connect(database="db_name", user="postgres", password="postgres", host="localhost", port="5432")
cursor = conn.cursor()
cursor.execute('sql')
cursor.execute(insert_sql)
conn.commit()
cursor.close()
conn.close()

SQLite

1
2
3
4
5
6
7
import sqlite3
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
cursor.execute('sql')
cursor.close()
conn.commit() # 提交事务
conn.close()

MongoDB

1
2
3
4
5
import pymongo
myclient = pymongo.MongoClient('mongodb://localhost:27017/')
dblist = myclient.list_database_names()
if "runoobdb" in dblist:
print("数据库已存在!")
坚持原创技术分享,您的支持将鼓励我继续创作!
0%