Python中经常使用的代码片段

目录
  • 日期生成
    • 获取过去 N 天的日期
    • 生成一段时间区间内的日期
  • 保存数据到CSV
  • requests 库调用
  • Python 操作各种数据库
    • 操作 Redis
    • 操作 MongoDB
    • 操作 MySQL
  • 本地文件整理
  • 多线程代码
  • 异步编程代码
  • 总结

针对工作生活中基础的功能和操作,梳理了下对应的几个Python代码片段,供参考:

日期生成

获取过去 N 天的日期

import datetime

def get_nday_list(n):
    before_n_days = []
    # [::-1]控制日期排序
    for i in range(1, n + 1)[::-1]:
        before_n_days.append(str(datetime.date.today() - datetime.timedelta(days=i)))
    return before_n_days

a = get_nday_list(30)
print(a)

输出:

['2021-12-26', '2021-12-27', '2021-12-28', '2021-12-29', '2021-12-30', '2021-12-31', '2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05', '2022-01-06', '2022-01-07', '2022-01-08', '2022-01-09', '2022-01-10', '2022-01-11', '2022-01-12', '2022-01-13', '2022-01-14', '2022-01-15', '2022-01-16', '2022-01-17', '2022-01-18', '2022-01-19', '2022-01-20', '2022-01-21', '2022-01-22', '2022-01-23', '2022-01-24']

生成一段时间区间内的日期

import datetime

def create_assist_date(datestart = None,dateend = None):
    # 创建日期辅助表
    if datestart is None:
        datestart = '2016-01-01'
    if dateend is None:
        dateend = datetime.datetime.now().strftime('%Y-%m-%d')

    # 转为日期格式
    datestart=datetime.datetime.strptime(datestart,'%Y-%m-%d')
    dateend=datetime.datetime.strptime(dateend,'%Y-%m-%d')
    date_list = []
    date_list.append(datestart.strftime('%Y-%m-%d'))
    while datestart<dateend:
        # 日期叠加一天
        datestart+=datetime.timedelta(days=+1)
        # 日期转字符串存入列表
        date_list.append(datestart.strftime('%Y-%m-%d'))
    return date_list

d_list = create_assist_date(datestart='2021-12-27', dateend='2021-12-30')
print(d_list)

输出:

['2021-12-27', '2021-12-28', '2021-12-29', '2021-12-30']

保存数据到CSV

保存数据到 CSV 算是比较常见的操作了,下面代码如果运行正确会生成"2022_data_2022-01-25.csv"文件。

import os

def save_data(data, date):
    """
    :param data:
    :param date:
    :return:
    """
    if not os.path.exists(r'2022_data_%s.csv' % date):
        with open("2022_data_%s.csv" % date, "a+", encoding='utf-8') as f:
            f.write("标题,热度,时间,url\n")
            for i in data:
                title = i["title"]
                extra = i["extra"]
                time = i['time']
                url = i["url"]
                row = '{},{},{},{}'.format(title,extra,time,url)
                f.write(row)
                f.write('\n')
    else:
        with open("2022_data_%s.csv" % date, "a+", encoding='utf-8') as f:
            for i in data:
                title = i["title"]
                extra = i["extra"]
                time = i['time']
                url = i["url"]
                row = '{},{},{},{}'.format(title,extra,time,url)
                f.write(row)
                f.write('\n')

data = [{"title": "demo", "extra": "hello", "time": "1998-01-01", "url": "https://www.baidu.com/"}]
date = "2022-01-25"

save_data(data, date)

requests 库调用

据统计,requests 库是 Python 家族里被引用的最多的第三方库,足见其江湖地位之高大!

发送 GET 请求

import requests

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36',
  'cookie': 'some_cookie'
}
response = requests.request("GET", url, headers=headers)

发送 POST 请求

import requests

payload={}
files=[]
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36',
  'cookie': 'some_cookie'
}
response = requests.request("POST", url, headers=headers, data=payload, files=files)

Python 操作各种数据库

操作 Redis

连接 Redis

import redis

def redis_conn_pool():
    pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
    rd = redis.Redis(connection_pool=pool)
    return rd

写入 Redis

from redis_conn import redis_conn_pool

rd = redis_conn_pool()
rd.set('test_data', 'mytest')

操作 MongoDB

连接 MongoDB

from pymongo import MongoClient

conn = MongoClient("mongodb://%s:%s@ipaddress:49974/mydb" % ('username', 'password'))
db = conn.mydb
mongo_collection = db.mydata

批量插入数据

res = requests.get(url, params=query).json()
commentList = res['data']['commentList']
mongo_collection.insert_many(commentList)

操作 MySQL

连接 MySQL

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法获取操作游标
cursor = db.cursor()

执行 SQL 语句

# 使用 execute 方法执行 SQL 语句
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取一条数据
data = cursor.fetchone()

print "Database version : %s " % data

# 关闭数据库连接
db.close()

本地文件整理

整理文件涉及需求的比较多,这里分享的是将本地多个 CSV 文件整合成一个文件

import pandas as pd
import os

df_list = []
for i in os.listdir():
    if "csv" in i:
        day = i.split('.')[0].split('_')[-1]
        df = pd.read_csv(i)
        df['day'] = day
        df_list.append(df)
df = pd.concat(df_list, axis=0)
df.to_csv("total.txt", index=0)

多线程代码

多线程也有很多实现方式,我们选择自己最为熟悉顺手的方式即可

import threading
import time

exitFlag = 0

class myThread (threading.Thread):
    def __init__(self, threadID, name, delay):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.delay = delay
    def run(self):
        print ("开始线程:" + self.name)
        print_time(self.name, self.delay, 5)
        print ("退出线程:" + self.name)

def print_time(threadName, delay, counter):
    while counter:
        if exitFlag:
            threadName.exit()
        time.sleep(delay)
        print ("%s: %s" % (threadName, time.ctime(time.time())))
        counter -= 1

# 创建新线程
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)

# 开启新线程
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print ("退出主线程")

异步编程代码

异步爬取网站代码示例:

import asyncio
import aiohttp
import aiofiles

async def get_html(session, url):
    try:
        async with session.get(url=url, timeout=8) as resp:
            if not resp.status // 100 == 2:
                print(resp.status)
                print("爬取", url, "出现错误")
            else:
                resp.encoding = 'utf-8'
                text = await resp.text()
                return text
    except Exception as e:
        print("出现错误", e)
        await get_html(session, url)

使用异步请求之后,对应的文件保存也需要使用异步,即是一处异步,处处异步

async def download(title_list, content_list):
    async with aiofiles.open('{}.txt'.format(title_list[0]), 'a',
                             encoding='utf-8') as f:
        await f.write('{}'.format(str(content_list)))

总结

到此这篇关于Python中经常使用的代码片段的文章就介绍到这了,更多相关Python代码片段内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python实用代码片段收集贴

    获取一个类的所有子类 复制代码 代码如下: def itersubclasses(cls, _seen=None):     """Generator over all subclasses of a given class in depth first order."""     if not isinstance(cls, type):         raise TypeError(_('itersubclasses must be cal

  • 30秒学会30个超实用Python代码片段【收藏版】

    许多人在数据科学.机器学习.web开发.脚本编写和自动化等领域中都会使用Python,它是一种十分流行的语言. Python流行的部分原因在于简单易学. 本文将简要介绍30个简短的.且能在30秒内掌握的代码片段. 1. 唯一性 以下方法可以检查给定列表是否有重复的地方,可用set()的属性将其从列表中删除. def all_unique(lst): return len(lst) == len(set(lst)) x = [1,1,2,2,3,2,3,4,5,6] y = [1,2,3,4,5]

  • 自己使用总结Python程序代码片段

    用于记录自己写的,或学习期间看到的不错的,小程序,持续更新...... **************************************************************** [例001]计算:1-2+3-4..+199-200值 复制代码 代码如下: #encoding=utf-8  #计算 1-2+3-4..+199-200值  #1+3+5+7+...199  #-2-4-6...-200  sum1  = 0  sum2  = 0  for i in range

  • Python中经常使用的代码片段

    目录 日期生成 获取过去 N 天的日期 生成一段时间区间内的日期 保存数据到CSV requests 库调用 Python 操作各种数据库 操作 Redis 操作 MongoDB 操作 MySQL 本地文件整理 多线程代码 异步编程代码 总结 针对工作生活中基础的功能和操作,梳理了下对应的几个Python代码片段,供参考: 日期生成 获取过去 N 天的日期 import datetime def get_nday_list(n): before_n_days = [] # [::-1]控制日期排

  • Python中协程用法代码详解

    本文研究的主要是python中协程的相关问题,具体介绍如下. Num01–>协程的定义 协程,又称微线程,纤程.英文名Coroutine. 首先我们得知道协程是啥?协程其实可以认为是比线程更小的执行单元. 为啥说他是一个执行单元,因为他自带CPU上下文.这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程. 只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的. Num02–>协程和线程的差异 那么这个过程看起来和线程差不多.其实不然, 线程切换从系统层面远不止保存和恢复 CP

  • Python中join函数简单代码示例

    本文简述的是string.join(words[, sep]),它的功能是把字符串或者列表,元组等的元素给拼接起来,返回一个字符串,和split()函数与正好相反,看下面的代码理解. 首先展示下结果吧! 代码分享: a=["豫","N","C8","C89"] b=("豫","N","C8","C89") c="zhang" a

  • 在python中利用pycharm自定义代码块教程(三步搞定)

    当我们在使用pycharm时,输入特殊的关键字会有提示,然后按enter就可以自动补全,如果我们经常需要输出重复的代码时,能否也利用这种方法来自动补全呢? 下面我们就来利用pycharm自定义代码块: 1.打开pycharm中file下的setting,找到Editor下面的Live Templates ,右侧就会出现各种语言的代码块,我们选择Python,点击右侧的"+",选择Live Template 2.Abbreviation就是你自定义代码块的名字,Description是描

  • Python中sorted()用法案例代码

    目录 Python中sorted()用法 sorted() 作为 Python 内置函数之一,其功能是对序列(列表.元组.字典.集合.还包括字符串)进行排序. sorted() 函数的基本语法格式如下: list = sorted(iterable, key=None, reverse=False) 其中,iterable 表示指定的序列,key 参数可以自定义排序规则:reverse 参数指定以升序(False,默认)还是降序(True)进行排序.sorted() 函数会返回一个排好序的列表.

  • Python中turtle库常用代码汇总

    目录 一.设置画布 二.画笔 1.画笔属性 2.绘图命令 3. 命令详解 三.文字显示为一个圆圈 四.画朵小花 总结 一.设置画布 turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置 turtle.screensize(canvwidth=600,canvheight=800,bg='black')#参数分别代表画布的宽.高.背景色turtle.screensize()#返回默认大小(400,300) turtle.setup(width=0.6,height=0.6,start

  • python中kmeans聚类实现代码

    k-means算法思想较简单,说的通俗易懂点就是物以类聚,花了一点时间在python中实现k-means算法,k-means算法有本身的缺点,比如说k初始位置的选择,针对这个有不少人提出k-means++算法进行改进:另外一种是要对k大小的选择也没有很完善的理论,针对这个比较经典的理论是轮廓系数,二分聚类的算法确定k的大小,在最后还写了二分聚类算法的实现,代码主要参考机器学习实战那本书: #encoding:utf-8 ''''' Created on 2015年9月21日 @author: Z

  • python中bottle使用实例代码

    模仿学习同事的代码来写的,主要是搞懂python中如何来组织包,如何调用包,如何读取配置文件,连接数据库,设置路由,路由分组.(注:使用的是python3.6) 整体目录设计如下: 根据调用层级从上往下来说: 首先项目根目录下的main.py是整个程序的入口,主要作用启动http服务器,调用分组路由. main.py import bottle from confg.conf import CONF from api.user import User db_url = CONF.db.url d

  • php中常用字符串处理代码片段整理

    移除 HTML 标签 复制代码 代码如下: $text = strip_tags($input, ""); 上面的函数主要是使用了strip_tags,具体的使用说明参考. 返回 $start 和 $end 之间的文本 复制代码 代码如下: function GetBetween($content,$start,$end){ $r = explode($start, $content); if (isset($r[1])){ $r = explode($end, $r[1]); ret

  • 在Python中定义一个常量的方法

    大家都知道,网络上流行这么一句话 如果一个程序,JAVA需要写1000行,那PHP要写500行,而Python只要写200行就可以拉~~ 那么在Python中,如何用代码去实现一个常量呢? class MyNum(object): def __init__(self): self.__PI = 3.1415926 @property def PI(self): return self.__PI mynum = MyNum() print(mynum.PI) 这是通过私有属性去定义,通过装饰器@p

随机推荐