文章目录
- 一. Python操作之-- 使用Python 提取PDF文件中的表格数据!
- 二:
- 三: Python中的 @staticmethod@classmethod方法
- 四: 反斜杠 \
- 五: 终端的解释器提示符号修改
- 六: python使用json.dumps输出中文
- 七: itertools函数的使用,为高效循环而创建迭代器的函数
- 八: 将列表或者元祖中的数据合并为一个字符串
- 九: 判断某个参数是不是 另一种参数类型,例如 某时间格式数据 str = '2021-02-02' 是不是时间格式
- 十: 时间格式的类型转换,包括时间转换字符、字符转换时间等
- 十一: conda创建环境和删除环境
- 十三: Python 使用flask进行前端展示,以及进行 分页 展示
- 十四: Python使用 Flask中的 render_template() 函数
- 十五:python divmod() 返回的是商和余数的元祖
- 十六: reshape()的使用,
- 十七: expand_dim(数组,axis=[]) 对数组进行维度扩展
- 十八: as_list() 进行列表的转换,例如将一个元组进行列表转换
- 十九: 解决Linux中Python导入包路径错误
- 二十一:Python中的string模块的使用
一. Python操作之-- 使用Python 提取PDF文件中的表格数据!
Python提供了许多可用于pdf表格识别的库,如camelot、tabula、pdfplumber等。
综合来看,pdfplumber库的性能较佳,能提取出完整、且相对规范的表格
该库的安装方式 : pip install pdfplumber
库中提供两种PDF表格提取函数:
-
.extract_tables()
-
.extract_table()
这两种函数 -
.extract_tables()
可输出页面中的所有表格,并且返回一个嵌套列表,其结构层次为table→row→cell
with pdfplumber.open(filepath,‘w’) as pdf: pdf 文件读取方式
page = pdf.pages[45] #这里设置的是想要处理的页面
读取方式是:
page.extract_tables()
- .extract_table()
返回多个独立列表,其结构层次为row→cell。
若页面中存在多个行数相同的表格,则默认输出顶部表格;
否则,仅输出行数最多的一个表格。
注意:此时,表格的每一行都作为一个单独的列表,列表中每个元素即为原表格的各个单元格内容。
在此基础上,从PDF文件中提取表格数据,一种思路就是将提取出来的列表视为一个字符串就,
结合Python的正则表达式re模块进行字符串处理,之后将其保存为以标准英文逗号分割、可被Excel识别的csv格式文件
二:
import pygal 可以
pie_chart = pygal.Pie() #1. 实现扇形图的绘制
#pie_chart = pygal.Line() # 实现多重曲线趋势的绘制
#pie_chart = pygal.Radar() # 可以实现正六边型的趋势绘制
pie_chart.title = ‘’
pie_chart.add(‘name’,比例)
三: Python中的 @staticmethod@classmethod方法
Python 中类中定义的方法可以是:
- @classmethod方法 是装饰的类方法
- @staticmethod@classmethod方法 是装饰的静态方法
- 用的最多的还是不带装饰器的实例方法
装饰之后的函数在进行调用的时候会有着不同的形式
四: 反斜杠 \
- 在行尾的时候用作续航符号
- 在字符串中 、使用转义字符,可一件普通的字符转化为有特殊含义的字符。
如: \n \t
五: 终端的解释器提示符号修改
例如: 将自带的 <<<< 改为 -----
import sys
sys.ps1 = ‘-----’ 进行更改,可以更改为任何东西
六: python使用json.dumps输出中文
在使用json.dumps时注意一个问题
import json
print(json.dumps(‘中国’))
返回的是 “\u4e2d\u56fd”
输出的会是
‘中国’ 中的ascii字符码,而不是真正的中文。
这是因为json.dumps序列化时对中文默认使用的ascii编码
想输出真正的中文需要指定ensure_ascii=False:
中文的时候正确使用方法: 添加上ensure_ascii 参数
import json
print(json.dumps(‘中国’, ensure_ascii=False))
“中国”
七: itertools函数的使用,为高效循环而创建迭代器的函数
下面的网址:包含所有的itertools的模块函数
https://docs.python.org/zh-cn/3.8/library/itertools.html
八: 将列表或者元祖中的数据合并为一个字符串
1. 语法 str.join(squence)
2. 示例
>>> str = '-' #指定字符之间的符号
>>> seq = ('b','o','o','k')
>>> print str.join(seq)
>>> b-o-o-k # 输出结果
九: 判断某个参数是不是 另一种参数类型,例如 某时间格式数据 str = ‘2021-02-02’ 是不是时间格式
isinstace(str,datetime.datetime)
十: 时间格式的类型转换,包括时间转换字符、字符转换时间等
import datetime
1. 日期时间格式转字符 使用的是 strftime() 函数
date = 2021-12-23
datetime.strptime('2021-12-23','%Y-%m-%d) #这里可以根据需要进行转换 例如:没有中间的'-'符号
date.strftime('%Y-%m-%d')
#'2021-12-23'
date.strftime('%Y%m%d')
#'20211223'
date.strftime('%Y-%m')
#'2021-12'
2. 字符转换日期时间
法一:
datetime.strptime('2018-09-08','%Y-%m-%d')
#datetime.datetime(2018, 9, 8, 0, 0)
法二: 使用的是pandas里面的 to_datetime() 函数
import pandas as pd
pd.to_datetime('2018-09-08')
#Timestamp('2018-09-08 00:00:00')
pd.to_datetime('201909',format='%Y%m')
#Timestamp('2019-09-01 00:00:00')
3. 数值转换日期
dt = 20180908
datetime.strptime(str(dt),'%Y%m%d')
#datetime.datetime(2018, 9, 8, 0, 0)
4. pandas中的时间处理
import random
df = pd.DataFrame({
'some_data' : [random.randint(100,999) for i in range(1,10)],
'a_col' : '2019-07-12',
'b_col' : datetime.datetime.now().date(),
'c_col' : time.time()},
index=range(1,10))
十一: conda创建环境和删除环境
删除虚拟环境:
(推荐教程:Python入门教程)
conda remove -n your_env_name(虚拟环境名称) --all
删除虚拟环境中的包:
conda remove --name $your_env_name $package_name(包名)
退出虚拟环境:
Linux:
source deactivate your_env_name(虚拟环境名称)
Windows:
deactivate
也可以使用`activate root`切回root环境。
十三: Python 使用flask进行前端展示,以及进行 分页 展示
1. 使用flask进行前端展示
2. 使用flask进行 分页 展示
from flask_paginate import Pagination,get_page_parameter
# from flask import Flask, render_template,request
from flask_sqlalchemy import SQLAlchemy
上面的两个是我找到得两个进行分页的参数,目前不知道区别以及期使用用途
使用flask_paginate分页技术进行分页
使用参数:
from flask_paginate import Pagination, get_page_parameter
from Config import DBsession, EventRecordDB, draughtFan, wind, and_, StatiscData
Pagination: 类函数
get_page_parameter: 获取当前翻页的参数
上面的两个参数是flask-paginate的主要点
1. 在视图函数定义方法
pagination = Pagination('参数')
page = request.args.get(get_page_parameter(), type=int, default=1)
Pagination.__init__(**kwargs) 注意:标注 --- 的是重点关注参数
found=0: 当使用搜索是使用
page: 当前页, 使用实例对象中的page -----------------------
per_page: 每页显示多少项, 可以使用数据表的切片slice操作来定义, per_page ----------------
page_parameter: 页面参数, 默认为page, http://localhost:5000/?page=2
prev_label: 上一页, 默认为<<, 可以定义prev_label='上一页'
next_label: 下一页, 默认为>>, 可以定义next_label='下一页'
total: 总共有多少页 -----------------------
bs_version=2: Bootstrap版本, 默认为版本2 -------------------------
注意: 如果使用的是Boostrap3的CDN, 那么就要设置bs_version=3, 否则会无法正常显示
{{ pagination.links }} 这段 代码放在HTML页面中,作用就是,将我们的分页放在先要展示的位置 links 表示的是链接网址
以上为主要参数的使用
具体使用方法:
# 获取当前为第几页
page = request.args.get(get_page_parameter(), type=int, default=1)
# 定义每页显示多少项
start = (page-1)*config.PER_PAGE
end = start + config.PER_PAGE
# 使用切片来显示每页显示多少项
posts = PostModel.query.slice(start, end)
pagination = Pagination(bs_version=3, page=page, total=PostModel.query.count())
context = {
"posts": posts,
"pagination": pagination,
# ... others
}
return render_template('index.html', **context)
2. 在模板中使用方法
直接在想要放置分页条的地方使用 ↓↓↓↓
{{ pagination.links }}
十四: Python使用 Flask中的 render_template() 函数
render_template() 作用:在Python代码中 直接生成 HTML 缺点很多,比如笨拙,效率低,可读性差。
因此, Flask 提供了 Jinja2 模板引擎来帮助开发者高效灵活生成HTML
html模板文件的位置
模板即自己写好的模板html文件,需要放在templates文件夹内。目录结构如下:
1.
/application.py
/templates
/hello.html
2.
/application
/__init__.py
/templates
/hello.html
以上两种存放情况。
具体的实施方法:
`render_template()`函数是`flask`函数的,他从模板文件夹`templates`中呈现给定的模板上下文。
语法以及参数:
import flask
flask.render_template(template_name, **context)
render_template()函数需要调用flask包
template_name 参数是: 模板的文件名字 类型是字符串类型,不可省略
context 参数是: 模板的参数 由模板参数和对应的值组成的字典,可以省略的参数
返回值: str render_template() 函数返回替换模板参数后的模板文本。
有两种使用情况:
1. 模板中没有参数,就是说不需要给模板中给定参数。
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello world</title>
</head>
<body>
<h1> Hello World! </h1>
</body>
</html>
import flask
app = flask.Flask(__name__)
@app.route("/hello")
def hello():
return flask.render_template("hello_world.html")
if __name__ == '__main__':
app.run()
运行后在浏览器中输入http://地址/hello,结果如下:
2. 给模板中传递参数。
例如: 模板../templates/for.html如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Jinja2 Circulation Control</title>
</head>
<body>
<h1> {{product}} list: </h1>
<ul>
{% for product in products %}
<li>{{product}}</li>
{% endfor %}
</ul>
</body>
</html>
import flask
app = flask.Flask(__name__)
@app.route("/")
def index():
products = ["iphoneX", "MacBook Pro", "Huawei"]
kwargs = {
"products": products
}
return flask.render_template("for.html", **kwargs)
if __name__ == '__main__':
app.run()
十五:python divmod() 返回的是商和余数的元祖
使用功能方法:divmod(x, y)
函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。
# 我们这里要计算的是总页数 如果有余数的话还要+1才是总页数。
十六: reshape()的使用,
例如: reshape(2,6) 就是将一个数转换成 2行 6列
reshape(8,-1) 就是将一个数组转换成 8行 的数据,至于是几列会自动进行计算。
同理的(-1,5) 就是固定列的数量,行数进行自动计算。
十七: expand_dim(数组,axis=[]) 对数组进行维度扩展
一般的 axis=[-1] 的意思就是在最后面进行维度扩展 [1,2,3] -->> [1,2,3,1]
axis = 多少 就是说在那个位置进行扩展 0,1,2,3 再多的话,就会提示错误,不管多少的
维度,他们的数据总量是不变的。
关键理解:就是说 expand_dim(input,axis=[]) input的shape是固定的,扩展的结果就是在相应的维度上进行扩展,
只要保证数据的参数量不变,不过一般好像都是 1。
详细介绍的网址:
https://blog.csdn.net/hong615771420/article/details/83448878#:~:text=np.%20expand_dims%20%E7%9A%84%E4%BD%9C%E7%94%A8%E6%98%AF%E9%80%9A%E8%BF%87%E5%9C%A8%E6%8C%87%E5%AE%9A%E4%BD%8D%E7%BD%AE%E6%8F%92%E5%85%A5%E6%96%B0%E7%9A%84%E8%BD%B4%E6%9D%A5%E6%89%A9%E5%B1%95%E6%95%B0%E7%BB%84%E5%BD%A2%E7%8A%B6%EF%BC%8C%20%E5%87%BD%E6%95%B0%E6%A0%BC%E5%BC%8F%E5%A6%82%E4%B8%8B%EF%BC%9A%20np.%20expand_dims%20%28array%2C%20axis%29,np.%20expand_dims%2C%20np%20.newaxis%29%E5%92%8C%E5%88%A0%E9%99%A4%E7%BB%B4%E5%BA%A6%20%28%20np%20.squeeze%29%E7%9A%84%E6%96%B9%E6%B3%95.%20cxx654%E7%9A%84%E5%8D%9A%E5%AE%A2.
十八: as_list() 进行列表的转换,例如将一个元组进行列表转换
a = (1,3)
a.as_list()
一般用于在TensorFlow中的获取某个 tensor(张量) 的形状后 get_shape().as_list()
这样使用,如此可获取 某一维度的形状。
十九: 解决Linux中Python导入包路径错误
原因:IDE环境下,例如:pycharm 下,会自动搜索代码所在的目录,寻找相关的包,而Linux环境下,
直接运行 .py 文件,只会搜索默认的路径,此时需要把代码所在的目录添加到 sys.path 当中。
解决步骤:
1. 终端进入Python,键入: import sys 并且查看 print(sys.path)
2. cd 进入上述打印出的路径的 site-packages 目录下
3. 增加 .pth 文件 vim code_path.pth (若是没有这个文件,此命令会自动生成该文件)
4. 在该文件下添加你的代码目录(代码目录就是我们的项目文件所在目录),按 Esc 键入: :wq 进行保存。
二十一:Python中的string模块的使用
String模块中的常量:
string.digits:数字0~9
string.ascii_letters:所有字母(大小写)
string.lowercase:所有小写字母
string.printable:可打印字符的字符串
string.punctuation:所有标点
string.uppercase:所有大写字母