开发者

Python中经常使用的代码片段

开发者 https://www.devze.com 2022-12-09 12:37 出处:网络 作者: rs勿忘初心
目录日期生成获取过去 N 天的日期生成一段时间区间内的日期保存数据到CSVrequests 库调用python 操作各种数据编程客栈库操作 Redis操作 MongoDB操作 mysql本地文件整理多线程代码异步编程代码总结针对工作生活中基础
目录
  • 日期生成
    • 获取过去 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-1www.cppcns.com2-30']

              保存数据到CSV

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

              import os
               
               
              def save_dathttp://www.cppcns.coma(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, "出现错误http://www.cppcns.com")
                          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

              精彩评论

              暂无评论...
              验证码 换一张
              取 消