<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          分享幾段祖?zhèn)鞯腜ython代碼,拿來直接使用!

          共 6315字,需瀏覽 13分鐘

           ·

          2022-03-17 02:12

          ↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能

          后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包


          今天分享幾段工作生活中常用的代碼,都是最為基礎(chǔ)的功能和操作,而且大多還都是出現(xiàn)頻率比較高的,很多都是可以拿來直接使用或者簡(jiǎn)單修改就可以放到自己的項(xiàng)目當(dāng)中

          日期生成

          很多時(shí)候我們需要批量生成日期,方法有很多,這里分享兩段代碼

          獲取過去 N 天的日期

          import?datetime

          def?get_nday_list(n):
          ????before_n_days?=?[]
          ????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)

          Output:

          ['2021-12-23', '2021-12-24', '2021-12-25', '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']

          生成一段時(shí)間區(qū)間內(nèi)的日期

          import?datetime

          def?create_assist_date(datestart?=?None,dateend?=?None):
          ????#?創(chuàng)建日期輔助表

          ????if?datestart?is?None:
          ????????datestart?=?'2016-01-01'
          ????if?dateend?is?None:
          ????????dateend?=?datetime.datetime.now().strftime('%Y-%m-%d')

          ????#?轉(zhuǎn)為日期格式
          ????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????????#?日期疊加一天
          ????????datestart+=datetime.timedelta(days=+1)
          ????????#?日期轉(zhuǎn)字符串存入列表
          ????????date_list.append(datestart.strftime('%Y-%m-%d'))
          ????return?date_list

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

          Output:

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

          保存數(shù)據(jù)到CSV

          保存數(shù)據(jù)到 CSV 是太常見的操作了,分享一段我個(gè)人比較喜歡的寫法

          def?save_data(data,?date):
          ????if?not?os.path.exists(r'2021_data_%s.csv'?%?date):
          ????????with?open("2021_data_%s.csv"?%?date,?"a+",?encoding='utf-8')?as?f:
          ????????????f.write("標(biāo)題,熱度,時(shí)間,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("2021_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')

          帶背景顏色的 Pyecharts

          Pyecharts 作為 Echarts 的優(yōu)秀 Python 實(shí)現(xiàn),受到眾多開發(fā)者的青睞,用 Pyecharts 作圖時(shí),使用一個(gè)舒服的背景也會(huì)給我們的圖表增色不少

          以餅圖為例,通過添加 JavaScript 代碼來改變背景顏色

          def?pie_rosetype(data)?->?Pie:
          ????background_color_js?=?(
          ????"new?echarts.graphic.LinearGradient(0,?0,?0,?1,?"
          ????"[{offset:?0,?color:?'#c86589'},?{offset:?1,?color:?'#06a7ff'}],?false)"
          )
          ????c?=?(
          ????????Pie(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js)))
          ????????.add(
          ????????????"",
          ????????????data,
          ????????????radius=["30%",?"75%"],
          ????????????center=["45%",?"50%"],
          ????????????rosetype="radius",
          ????????????label_opts=opts.LabelOpts(formatter="{b}:?{c}"),
          ????????)
          ????????.set_global_opts(title_opts=opts.TitleOpts(title=""),
          ????????????????????????)
          ????)
          ????return?c

          requests 庫(kù)調(diào)用

          據(jù)統(tǒng)計(jì),requests 庫(kù)是 Python 家族里被引用的最多的第三方庫(kù),足見其江湖地位之高大!

          發(fā)送 GET 請(qǐng)求

          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)

          發(fā)送 POST 請(qǐng)求

          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)

          根據(jù)某些條件循環(huán)請(qǐng)求,比如根據(jù)生成的日期

          def?get_data(mydate):
          ????date_list?=?create_assist_date(mydate)
          ????url?=?"https://test.test"
          ????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':?''
          ????????}
          ????for?d?in?date_list:
          ????????payload={'p':?'10',
          ????????'day':?d,
          ????????'nodeid':?'1',
          ????????'t':?'itemsbydate',
          ????????'c':?'node'}
          ????????for?i?in?range(1,?100):
          ????????????payload['p']?=?str(i)
          ????????????print("get?data?of?%s?in?page?%s"?%?(d,?str(i)))
          ????????????response?=?requests.request("POST",?url,?headers=headers,?data=payload,?files=files)
          ????????????items?=?response.json()['data']['items']
          ????????????if?items:
          ????????????????save_data(items,?d)
          ????????????else:
          ????????????????break

          Python 操作各種數(shù)據(jù)庫(kù)

          操作 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

          批量插入數(shù)據(jù)

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

          操作 MySQL

          連接 MySQL

          import?MySQLdb

          #?打開數(shù)據(jù)庫(kù)連接
          db?=?MySQLdb.connect("localhost",?"testuser",?"test123",?"TESTDB",?charset='utf8'?)

          #?使用cursor()方法獲取操作游標(biāo)?
          cursor?=?db.cursor()

          執(zhí)行 SQL 語句

          #?使用?execute?方法執(zhí)行?SQL?語句
          cursor.execute("SELECT?VERSION()")

          #?使用?fetchone()?方法獲取一條數(shù)據(jù)
          data?=?cursor.fetchone()

          print?"Database?version?:?%s?"?%?data

          #?關(guān)閉數(shù)據(jù)庫(kù)連接
          db.close()

          Output:

          Database version : 5.0.45

          本地文件整理

          整理文件涉及需求的比較多,這里分享的是將本地多個(gè) CSV 文件整合成一個(gè)文件

          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)

          多線程代碼

          多線程也有很多實(shí)現(xiàn)方式,我們選擇自己最為熟悉順手的方式即可

          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

          #?創(chuàng)建新線程
          thread1?=?myThread(1,?"Thread-1",?1)
          thread2?=?myThread(2,?"Thread-2",?2)

          #?開啟新線程
          thread1.start()
          thread2.start()
          thread1.join()
          thread2.join()
          print?("退出主線程")

          異步編程代碼

          異步爬取網(wǎng)站

          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,?"出現(xiàn)錯(cuò)誤")
          ????????????else:
          ????????????????resp.encoding?=?'utf-8'
          ????????????????text?=?await?resp.text()
          ????????????????return?text
          ????except?Exception?as?e:
          ????????print("出現(xiàn)錯(cuò)誤",?e)
          ????????await?get_html(session,?url)

          使用異步請(qǐng)求之后,對(duì)應(yīng)的文件保存也需要使用異步,即是一處異步,處處異步

          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)))
          你的每一個(gè)點(diǎn)贊、在看,每一條留言,每一次轉(zhuǎn)發(fā),都對(duì)我很重要,感謝支持。

          推薦閱讀

          1. 666!Python+Tableau+Excel 保姆級(jí)教程

          2. 用Python制作可視化報(bào)表,這也太快了!

          3. 別去外包

          4. 再見!MySQL!

          5. 數(shù)據(jù)分析,YYDS


          您看此文用???分??秒,轉(zhuǎn)發(fā)只需1秒

          瀏覽 33
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费黄色成人视频网站在线观看 | 成人操屄视频 | 春色激情 | 欧美91成人网 | 日本内射精品特黄 |