# Python
# 基础
# IO
# 文件读取模式
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
U | 通用换行模式(Python 3 不支持)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
# 生成requirements.txt文件
参考:https://github.com/bndr/pipreqs
#如果是python3,则换成pip3
pip install pipreqs
# 在当前目录生成
pipreqs . --encoding=utf8 --force
# 字符串
# 输出进度条
from time import sleep
from tqdm import tqdm
# 这里同样的,tqdm就是这个进度条最常用的一个方法
# 里面存一个可迭代对象
for i in tqdm(range(1, 500)):
# 模拟你的任务
sleep(0.01)
sleep(0.5)
# 格式化输出
格式化 | 解释 | 举例 |
---|---|---|
%s | 字符串 | print ("His name is %s"%("Aviad")) |
%d | 整数 | print ("He is %d years old"%(25)) |
%f | 浮点数 | print ("His height is %f m"%(1.83)) |
%.2f | 浮点数(保留小数点) | print ("His height is %.2f m"%(1.83)) |
%10s %8.2f | 指定占位符宽度 | print ("Name:%10s Age:%8d Height:%8.2f"%("Aviad",25,1.83)) |
bin(10) | 二进制整数 | |
oct(10) | 八进制整数 | |
hex(10) | 十六进制整数 |
Python格式化输出 %s %d %f_ Hey_cancan的博客-CSDN博客 (opens new window)
# 计算百分比
'{:.2f}%'.format(member/denominator*100)
Python 百分比计算 - Blue·Sky - 博客园 (opens new window)
# 字符串表格格式输出
Python在命令行输出美观的表格 - FINTHON (opens new window)
import prettytable as pt
table = pt.PrettyTable(['No', 'JOBID', 'NAME', 'STATUS'])
table.add_row(['1', '101', 'job1', 'R'])
table.add_row(['2', '102', 'job2', 'R'])
table.add_row(['3', '103', 'job3', 'R'])
table.add_row(['4', '104', 'job4', 'R'])
print(table)
+----+-------+------+--------+
| No | JOBID | 名字 | STATUS |
+----+-------+------+--------+
| 1 | 101 | job1 | R |
| 2 | 102 | job2 | R |
| 3 | 103 | job3 | R |
| 4 | 104 | job4 | R |
+----+-------+------+--------+
# 字符串驼峰下划线互转
pyhumps · PyPI (opens new window)
import humps
humps.camelize("jack_in_the_box") # jackInTheBox
humps.decamelize("rubyTuesdays") # ruby_tuesdays
humps.pascalize("red_robin") # RedRobin
humps.kebabize("white_castle") # white-castle
# 日期
# 格式化输出
Python中日期和时间格式化输出的方法 - Tom_Mo - 博客园 (opens new window)
datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S');
# '2013-09-17 08:06:17'
now=datetime.datetime.now()
now.strftime('%Y')
# '2013'
# 显示一周中的第几天,其中星期天为0,星期一为1
import datetime
now=datetime.datetime.now()
now.strftime('%w')
# '2'
# 显示一年中的第几周,星期天为一周的第一天
import datetime
now=datetime.datetime.now()
now.strftime('%U')
# '37'
# 显示一年中的第几周 星期一为一周的第一天
now=datetime.datetime.now()
now.strftime('%W')
#'37'
# 时间加减
import datetime
now = datetime.datetime.now()
print(now.strftime('%Y-%m-%d %H:%M:%S'))
add_hour = now + datetime.timedelta(hours=8)
print(add_hour.strftime('%Y-%m-%d %H:%M:%S'))
# 2021-01-08 15:18:50
# 2021-01-08 23:18:50
# 列表
# 不区分大小写的判断一个元素是否在一个列表中
arr1 = ['Jack', 'mAry', 'bob']
arr2 = ['jack', 'mary']
for a1 in arr1:
if a1.lower() in [a2.lower() for a2 in arr2]:
print("%s is in arr2")
else:
print("%s is not in arr2")
# list排序
class Student:
def __init__(self, name, subject, mark):
self.name = name
self.subject = subject
self.mark = mark
s1 = Student("Jack", "os", 60)
s2 = Student("Jim", "cn", 61)
s3 = Student("Pony", "se", 65)
L = [s1, s2, s3]
L.sort(key=lambda t: t.mark)
for i in range(0, len(L)):
print(L[i].name+","+L[i].subject+","+str(L[i].mark))
# Pandas
# 操作
# dataframe修改列序列
order = ['date', 'time', 'open', 'high', 'low', 'close', 'volumefrom', 'volumeto']
df = df[order]
Python dataframe修改列顺序(pandas学习)_肥宅Sean-CSDN博客_pandas 调整列顺序 (opens new window)
# dataframe修改列名称
# 直接修改
mpd.columns = ["精确PV", "精确UV", "省", "日期", "近似PV", "近似UV", "精确度((近似UV-精确UV)/精确UV)"]
# 导入数据的时候修改
col_names = ["City","Colors_Reported","Shape_Reported","State","Time"]
ufo = pd.read_csv(r"ufo.csv", header = 0, names = col_names)
Pandas 3:如何修改columns的名称 - 知乎 (opens new window)
# 排序
# 按照列排序
import pandas as pd
lists = pd.read_excel("../007/List.xlsx")
# 按指定的一列排序
lists.sort_values(by="Price",inplace=True,ascending=False)
# 指定多列排序(注意:对Worthy列升序,再对Price列降序),ascending不指定的话,默认是True升序
lists.sort_values(by=["Worthy","Price"],inplace=True,ascending=[True,False])
print(lists)
# 运算
# 单列运算
df['col2'] = df['col1'].map(lambda x: x**2)
# 多列运算
df['col3'] = df.apply(lambda x: x['col1'] + 2 * x['col2'], axis=1)
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)_zwhooo的博客-CSDN博客 (opens new window)
# 合并dataframe
df = pd.read_csv('csv', low_memory=False, encoding='utf-8',
dtype=str, engine='c')
df_est = pd.read_csv('csv', low_memory=False,
encoding='utf-8',
dtype=str, engine='c')
mpd = pd.merge(df, df_est, how='inner', on=['province', 'global_day'])
Python3 pandas库(8) 匹配合并merge() - 知乎 (opens new window)
# 运维
# 安装venv虚拟环境
/usr/local/python3/bin/python3.8 -m venv venv
# 问题
# Python2
# urllib2打开https链接报错
<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:727)>
https://blog.51cto.com/lsieun/2952082
原因
Python2.7.9 之后,当使用urllib.urlopen打开一个 https 链接时,会验证一次 SSL 证书。而当目标网站使用的是自签名的证书时就会抛出如下异常:
# 方案一
使用ssl创建未经验证的上下文,在urlopen中传入上下文参数:
import ssl
context = ssl._create_unverified_context()
urllib.request.urlopen(req,context=context)
# 方案二
全局取消证书验证:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
urllib2.urlopen("https://www.12306.cn/mormhweb/").read()
# 方案三
使用的是requests模块,将方法中的verify设置位False即可:
requests.get(url, headers=Hostreferer,verify=False)
Scala →