Python一些常用方法-整理

这篇博客涵盖了Python编程的各种实用技巧,包括数组合并、对象转换、字符串操作、文件读写、JSON处理、HTML内容处理、异常处理、数据库交互等。还涉及到网页图片下载、鼠标控制等高级应用,适合Python初学者和进阶者学习。
摘要由CSDN通过智能技术生成

目录

数组合并/追加

obiect转str类型

arr数组转字符串

自定义保存页面图片 

字符串去空格

python 文件读写(追加、覆盖)

toString且' 转 "

int拼接组装

字符串拼接组装,并用符号分割

python类型转换

删除html多余标签内的内容

html转字符串:

对象转json:

python json.dumps() 中文乱码问题

Python 读取文件,文件读取全部/一行

字符串分割

异常处理(Try…Except)

Python控制鼠标点击

python连接数据库 

python读取/解析本地json文件


写爬虫的时候整理了一些,每次看的时候去扒不是很方便,单独拎出来整理下

数组合并/追加

list = []
list2 = []
node = {}
...
list.append(list2)
list2.append(node) 

obiect转str类型

  • object.__str__().replace("{'", "").replace("'}", "")
  • str(x) 将对象 x 转换为字符串

arr数组转字符串

  • ['xxxxxxxxxxxx'].__str__().replace("['", "").replace("']", "") 仅限['xxxxxxxxxxxx'])
  • str(x) 将对象 x 转换为字符串
  • str(arr).replace("[", "").replace("]", "")

自定义保存页面图片 

def loadPage(img_url):
    response = requests.get(img_url)
    return response.content


# 自定义保存页面图片函数
def getImage(image_url):
    # print("image_url= {}".format(image_url))
    if image_url is None:
        return ""
    if len(image_url) <= 10:
        return ""
    name = image_url.split("/")[len(image_url.split("/"))-1]
    fth = "image/{}".format(name)
    img = loadPage(image_url)
    with open(fth, "wb") as f:
        f.write(img)
    return fth

字符串去空格

def strStrip(string):
    string = string.replace('\n', '').replace('\r', '').replace('\t', '').strip()
    string = string.replace("'", "").replace('\\n', '').replace('\\r', '').replace('\\t', '')
    return string

python 文件读写(追加、覆盖)

  • 写json到本地write_json a持续写入
def write_json(content):
    with open('XueWei.txt', 'a', encoding='utf-8') as fObj:
        split = ",\n"
        json.dump(content, fObj, ensure_ascii=False)
        fObj.write(split)
        fObj.close()
  • 写文本到本地 a持续写入
def write(content):
    split = "\n"
    f = open(file_path, 'a', encoding='utf-8')
    # 写入数据
    f.write(content)
    f.write(split)
    # 关闭文件
    f.close()

toString且' 转 "

# ' 转 "
def toString(obj):
    return obj.__str__().replace("'", "\"")

int拼接组装

# return int 11 + 11 = 1111 
def addInt(first, end):
    return int(first.__str__() + end.__str__())

字符串拼接组装,并用符号分割

# return String addStr("第一部", ",", "第二部")
def addStr(first, sp, end):
    if len(first.__str__()) <= 0:
        return end.__str__()
    return first.__str__() + sp + end.__str__()

python类型转换

  • type("21")   获取类型
  • int("23")    字符串转换成int数字
  • item['name']      取对象里key为name的值
  • num=322
  • str='%d'%num   数字转换成字符串
# int(x[, base]) 将x转换为一个整数,base为进制,默认十进制
#
# long(x[, base] ) 将x转换为一个长整数
#
# float(x) 将x转换到一个浮点数
#
# complex(real[, imag])  创建一个复数
#
# str(x) 将对象 x 转换为字符串
#
# repr(x) 将对象 x 转换为表达式字符串
#
# eval(str)  用来计算在字符串中的有效Python表达式, 并返回一个对象
#
# tuple(s) 将序列 s 转换为一个元组
#
# list(s) 将序列 s 转换为一个列表
#
# set(s) 转换为可变集合
#
# dict(d) 创建一个字典。d 必须是一个序列(key, value) 元组。
#
# frozenset(s) 转换为不可变集合
#
# chr(x) 将一个整数转换为一个字符
#
# unichr(x) 将一个整数转换为Unicode字符
#
# ord(x) 将一个字符转换为它的整数值
#
# hex(x) 将一个整数转换为一个十六进制字符串
#
# oct(x)  将一个整数转换为一个八进制字符串

删除html多余标签内的内容

# 删除某个属性
doc('.article-t style').remove()

# 清楚多余的标签,只保留纯文本
from w3lib.html import remove_tags
 
a = '<em><em>ai</em></em>工程师'
print(remove_tags(a))

html转字符串:

# 网页属性里的双引号转单引号
html.__str__().replace('"', "'")

对象转json:

   

import json

json.loads() 将json转换为dict
json.dumps() 将dict转换为json
json.load() 将json文件转换为dict
json.dump() 将dict转换为json文件 person.json

# 类对象转换为json
person_json = json.dumps(person.__dict__)   
 
# 或者
# 第二个参数传递转换函数,或者使用default=lambda o: o.__dict__
person_json = json.dumps(person, default=convert2json)

# 将person转换为dict
def convert2json(person):
  return {
    'name': person.name,
    'age': person.age,
    'email': person.email
  }

# dict/对象转换为json文件
with open('person.json', 'w') as f:
  json.dump(person, f)

# 将json文件转换为dict/对象
import json
with open('person.json', 'r') as f:
  print(json.load(f))

python json.dumps() 中文乱码问题

json.dumps 序列化时默认使用的ascii编码,想输出真正的中文需要指定ensure_ascii=False:更深入分析,是应为dJSON object 不是单纯的unicode实现,而是包含了混合的unicode编码以及已经用utf-8编码之后的字符串。

写法:

Python2 :json.dumps(odata, ensure_ascii=False).decode('utf8')
                json.dumps(odata,ensure_ascii=False).decode('utf8').encode('gb2312')
Python3 :json.dumps(odata, ensure_ascii=False)

 

Python 读取文件,文件读取全部/一行

file = open("readme.txt")
 
while True:
    text = file.readline()  # 只读取一行内容
 
    # 判断是否读取到内容
    if not text:
        break
 
    # 每读取一行的末尾已经有了一个 `\n`
    print(text,end="")
 
 
file.close()
  • 逐行读取文件:(简洁)

        f = open("test.txt", "r")
        for x in f:
          print(x)

  • 读全部

        f = open("test.txt", "r")
        print(f.read())

  • 读取文件的前10个字符

        f = open("test.txt", "r")
        print(f.read(10))

字符串分割

str.split('>>>')

异常处理(Try…Except)

try块让你可以检测代码块中的错误。

except块让你可以处理错误。

finally块让你可以执行最终代码,不管tryexcept块的结果如何,finally块的代码都将执行。

try:
  print(x)
except:
  print("发生异常")

#------------
try:
  print("你好")
except:
  print("出错了")
else:
  print("正常")

#------------
try:
  print(x)
except:
  print("except出错了")
finally:
  print("finally")

Python控制鼠标点击

import pyautogui
 
# 用0.5 秒的时间把光标移动到x,y(437, 151) 位置,y竖向向下增加
pyautogui.moveTo(437, 151, duration=0.5)
pyautogui.click()
 
pyautogui.click(350, 190, button ='left')# 左击
pyautogui.click(350, 190, button ='right')# 右击

python连接数据库 

pyton连接数据库需要先安装pymysql模块:pip install pymysql
安装完成后导入pymysql模块:import pymysql
python连接数据库主要分五个步骤:
step1:连接数据库
step2:创建游标对象
step3:对数据库进行增删改查
step4:关闭游标
step5:关闭连接


# 1. 连接数据库,
conn = pymysql.connect(
    host='localhost',
    user='root',
    password='redhat',
    db='helloTest',
    charset='utf8',
       # autocommit=True,    # 如果插入数据,, 是否自动提交? 和conn.commit()功能一致。
)
# ****python, 必须有一个游标对象, 用来给数据库发送sql语句, 并执行的.
# 2. 创建游标对象,
cur = conn.cursor()
# 3. 对于数据库进行增删改查
# 1). ************************创建数据表**********************************
try:
    create_sqli = "create table hello (id int, name varchar(30));"
    cur.execute(create_sqli)
except Exception as e:
    print("创建数据表失败:", e)
else:
    print("创建数据表成功;")
## 2). *********************插入数据****************************
try:
    insert_sqli = "insert into hello values(2, 'fensi');"
    cur.execute(insert_sqli)
except Exception as e:
    print("插入数据失败:", e)
else:
    # 如果是插入数据, 一定要提交数据, 不然数据库中找不到要插入的数据;
    conn.commit()
    print("插入数据成功;")
# 3). *********************插入多条数据****************************
try:
    info = [(i, "westos%s" %(i)) for i in range(100)]

    # *********************第一种方式********************
    # %s必须手动添加一个字符串, 否则就是一个变量名, 会报错.
    insert_sqli = "insert into hello values(%d, '%s');"
    for item in info:
        print('insert语句:', insert_sqli %item)
        cur.execute(insert_sqli %item)

     # *********************第二种方式********************
    insert_sqli = "insert into hello values(%s, %s);"
     cur.executemany(insert_sqli, info )
except Exception as e:
    print("插入多条数据失败:", e)
else:
    # 如果是插入数据, 一定要提交数据, 不然数据库中找不到要插入的数据;
    conn.commit()
    print("插入多条数据成功;")
# 4). **************************数据库查询*****************************
sqli = "select * from hello;"
result = cur.execute(sqli)  # 默认不返回查询结果集, 返回数据记录数。
print(result)
print(cur.fetchone())     # 1). 获取下一个查询结果集;
print(cur.fetchone())
print(cur.fetchone())
print(cur.fetchmany(4))   # 2). 获取制定个数个查询结果集;
info = cur.fetchall()     # 3). 获取所有的查询结果
print(info)
print(len(info))
print(cur.rowcount)       # 4). 返回执行sql语句影响的行数
#  5). 移动游标指针
print(cur.fetchmany(3))
print("正在移动指针到最开始......")
cur.scroll(0, 'absolute')
print(cur.fetchmany(3))
print("正在移动指针到倒数第2个......")
print(cur.fetchall())    # 移动到最后
cur.scroll(-2, mode='relative')
print(cur.fetchall())
# 4. 关闭游标
cur.close()
# 5. 关闭连接
conn.close()

python读取/解析本地json文件

import json # 引入模块


if __name__ == '__main__':
    # 打开一个json文件
    data = open("data.json", encoding='utf-8')
    # 转换为python对象
    strJson = json.load(data)
    for node in strJson['list']:
        print(node)

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

瑶山

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

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

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

打赏作者

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

抵扣说明:

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

余额充值