Python中的一些常用操作

一. Python操作之-- 使用Python 提取PDF文件中的表格数据!

Python提供了许多可用于pdf表格识别的库,如camelot、tabula、pdfplumber等。
综合来看,pdfplumber库的性能较佳,能提取出完整、且相对规范的表格

该库的安装方式 : pip install pdfplumber
库中提供两种PDF表格提取函数:

  1. .extract_tables()

  2. .extract_table()
    这两种函数

  3. .extract_tables()
    可输出页面中的所有表格,并且返回一个嵌套列表,其结构层次为table→row→cell
    with pdfplumber.open(filepath,‘w’) as pdf: pdf 文件读取方式
    page = pdf.pages[45] #这里设置的是想要处理的页面

读取方式是:
page.extract_tables()

  1. .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 中类中定义的方法可以是:

  1. @classmethod方法 是装饰的类方法
  2. @staticmethod@classmethod方法 是装饰的静态方法
  3. 用的最多的还是不带装饰器的实例方法
    装饰之后的函数在进行调用的时候会有着不同的形式

四: 反斜杠 \

  1. 在行尾的时候用作续航符号
  2. 在字符串中 、使用转义字符,可一件普通的字符转化为有特殊含义的字符。
    如: \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:所有大写字母

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QuietNightThought

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值