最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 解決動(dòng)態(tài)的定義變量名,并給其賦值的方法(大數(shù)據(jù)處理)

 更新時(shí)間:2018年11月10日 09:21:08   作者:威震四海  
今天小編就為大家分享一篇python 解決動(dòng)態(tài)的定義變量名,并給其賦值的方法(大數(shù)據(jù)處理),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

最近消費(fèi)kafka數(shù)據(jù)到磁盤的時(shí)候遇到了這樣的問題:

需求:每天大概有1千萬條數(shù)據(jù),每條數(shù)據(jù)包含19個(gè)字段信息,需要將數(shù)據(jù)寫到服務(wù)器磁盤,以第二個(gè)字段作為大類建立目錄,第7個(gè)字段作為小類配合時(shí)間戳作為文件名,臨時(shí)文件后綴tmp,當(dāng)每個(gè)文件的寫入條數(shù)(可配置,比如100條)達(dá)到要求條數(shù)時(shí),將后綴tmp改為out。

問題:大類共有30個(gè),小類不計(jì)其數(shù)而且未知,比如大類為A,小類為a,時(shí)間戳為20180606095835234,則A目錄下的文件名為20180606095835234_a.tmp,這樣一來需要在此文件寫滿100條時(shí),更新時(shí)間戳生成第二個(gè)文件名,如果此時(shí)有1000個(gè)文件都在寫則需要有1000個(gè)時(shí)間戳,和1000個(gè)計(jì)數(shù)器記錄每個(gè)文件當(dāng)前的條數(shù),如果分別定義1000個(gè)變量顯然是不劃算的,

嘗試:中間過程想到了動(dòng)態(tài)定義變量名,即

定義第七個(gè)字段:seven = data.split('|')[7]

定義文件名:filename = time_stamp + '_' + seven+'.tmp',

定義文件計(jì)數(shù)器:seven + ‘_num' = 0

定義文件時(shí)間戳:seven + '_stamp' = time.time( )

想法其實(shí)是沒問題的,但是這里用到了一個(gè)不常用的語法:用一個(gè)變量名和一個(gè)字符串拼接出來一個(gè)新的變量名,并繼續(xù)賦值(不知道我的表述是否清楚),試過了用local()函數(shù)、global()函數(shù)、exec()函數(shù)都沒有達(dá)到預(yù)期效果,也許是把問題想的太復(fù)雜了

解決:最后使用三個(gè)字典將這個(gè)問題完美解決,

定義一個(gè)字典用來存計(jì)數(shù)器,字典的每一個(gè)鍵對應(yīng)一個(gè)文件名,值對應(yīng)當(dāng)前計(jì)數(shù),并實(shí)時(shí)更新;

定義一個(gè)字典用來存時(shí)間戳,鍵對應(yīng)一個(gè)文件名,值對應(yīng)時(shí)間戳,達(dá)到100條就更新一次;

定義一個(gè)字典用來存大類,鍵對應(yīng)代號,值對應(yīng)分類;

局部功能代碼如下:

def kafka_to_disk():
 print('啟動(dòng)前檢測上次運(yùn)行時(shí)是否存在意外中斷的數(shù)據(jù)文件......')
 print('搜索最近一次執(zhí)行腳本產(chǎn)生的時(shí)間目錄......')
 # 待處理臨時(shí)文件列表
 tmp_list = []
 try:
  for category_dir in os.listdir(local_file_path):
   if len(os.listdir(local_file_path+os.sep+category_dir)) > 0:
    for file in os.listdir(local_file_path+os.sep+category_dir):
     if suffix in file:
      tmp_list.append(local_file_path+os.sep+category_dir+os.sep+file)
  # print('上次運(yùn)行程序產(chǎn)生的臨時(shí)文件有---{}'.format(tmp_list))
 except Exception as e:
  pass
 if len(tmp_list) == 0:
  print('未掃描任何殘留臨時(shí)文件')
 else:
  print('開始修復(fù)殘留臨時(shí)文件......')
 tmp_num = 0
 for tmp in tmp_list:
  os.rename(tmp, tmp.split('.')[0]+'.out')
  tmp_num += 1
 print('本次啟動(dòng)共修復(fù)殘留臨時(shí)文件★★★★★-----{}個(gè)-----★★★★★'.format(tmp_num))
 
 category_poor = {
  '1': 'news', '2': 'weibo', '3': 'weixin', '4': 'app', '5': 'newspaper', '6': 'luntan',
  '7': 'blog', '8': 'video', '9': 'shangji', '10': 'shangjia', '11': 'gtzy', '12': 'zfztb',
  '13': 'gyfp', '14': 'gjz', '15': 'zfxx', '16': 'ptztb', '17': 'company', '18': 'house',
  '19': 'hospital', '20': 'bank', '21': 'zone', '22': 'express', '23': 'zpgw', '24': 'zscq',
  '25': 'hotel', '26': 'cpws', '27': 'gxqy', '28': 'gpjj', '29': 'dtyy', '30': 'bdbk'}
 
 time_stamp = utils.get_time_stamp() # 初始化毫秒級時(shí)間戳 : 20180509103015125
 consumer = KafkaConsumer(topic, group_id=group_id, auto_offset_reset=auto_offset_reset, bootstrap_servers=eval(bootstrap_servers))
 print('連接kafka成功,數(shù)據(jù)篩選中......')
 file_poor = {}       # 子類池用于文件計(jì)數(shù)器
 time_stamp_poor = {}     # 子類時(shí)間戳池,用于觸發(fā)文件切換
 time_stamp = utils.get_time_stamp()  # 初始化毫秒級時(shí)間戳 :20180509103015125
 for message in consumer:
  # 提取第8個(gè)字段自動(dòng)匹配目錄進(jìn)行創(chuàng)建
  if message.value.decode().split('|')[1] in category_poor:
   category = category_poor[message.value.decode().split('|')[1]]
  else:
   print(message.value.decode())
   continue
  category_dir = local_file_path + os.sep + category
  if not os.path.exists(category_dir):
   os.makedirs(category_dir)
  # 提取第2個(gè)字段,用于生成文件名
  if message.value.decode().split('|')[7] in time_stamp_poor:
   shot_file_name = time_stamp_poor[message.value.decode().split('|')[7]] + '_' + message.value.decode().split('|')[7]
  else:
   shot_file_name = time_stamp + '_' + message.value.decode().split('|')[7]
  file_name = category_dir + os.sep + shot_file_name + '.tmp'
 
  # 給每一個(gè)文件設(shè)定一個(gè)計(jì)數(shù)器
  if message.value.decode().split('|')[7] not in file_poor:
   file_poor[message.value.decode().split('|')[7]] = 0
 
  with open(file_name, 'a', encoding='utf-8')as f1:
   f1.write(message.value.decode())
   file_poor[message.value.decode().split('|')[7]] += 1
 
  # 觸發(fā)切換文件的操作,用時(shí)間戳生成第二文件名
  if file_poor[message.value.decode().split('|')[7]] == strip_number:
   time_stamp_poor[message.value.decode().split('|')[7]] = utils.get_time_stamp()
   file_poor[message.value.decode().split('|')[7]] = 0

以上這篇python 解決動(dòng)態(tài)的定義變量名,并給其賦值的方法(大數(shù)據(jù)處理)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實(shí)現(xiàn)Logger打印功能的方法詳解

    Python實(shí)現(xiàn)Logger打印功能的方法詳解

    最近工作中遇到了打印的需求,通過查找相關(guān)的資料發(fā)現(xiàn)Python中Logger可以很好的實(shí)現(xiàn)打印,所以下面這篇文章主要給大家介紹了關(guān)于Python如何實(shí)現(xiàn)Logger打印功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-09-09
  • Python腳本實(shí)現(xiàn)獲取IP地址

    Python腳本實(shí)現(xiàn)獲取IP地址

    這篇文章主要為大家詳細(xì)介紹了如何基于Python編寫一個(gè)腳本,可以實(shí)現(xiàn)獲取主機(jī)名、外網(wǎng)IP(通過多個(gè)公共API嘗試) IPV4和IPV6以及所有網(wǎng)絡(luò)接口的內(nèi)網(wǎng)IP,感興趣的可以了解下
    2025-03-03
  • python中把元組轉(zhuǎn)換為namedtuple方法

    python中把元組轉(zhuǎn)換為namedtuple方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python中把元組轉(zhuǎn)換為namedtuple方法,有興趣的朋友們可以參考下。
    2020-12-12
  • python pillow模塊使用方法詳解

    python pillow模塊使用方法詳解

    這篇文章主要介紹了python pillow模塊使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 使用Scrapy框架爬取網(wǎng)頁并保存到Mysql的實(shí)現(xiàn)

    使用Scrapy框架爬取網(wǎng)頁并保存到Mysql的實(shí)現(xiàn)

    本文主要介紹了使用Scrapy框架爬取網(wǎng)頁并保存到Mysql的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Python 獲取主機(jī)ip與hostname的方法

    Python 獲取主機(jī)ip與hostname的方法

    今天小編就為大家分享一篇Python 獲取主機(jī)ip與hostname的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python-docx 實(shí)現(xiàn)整體修改或者部分修改文字的大小和字體類型

    Python-docx 實(shí)現(xiàn)整體修改或者部分修改文字的大小和字體類型

    這篇文章主要介紹了Python-docx 實(shí)現(xiàn)整體修改或者部分修改文字的大小和字體類型,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python可視化最頻繁使用的10大工具總結(jié)

    Python可視化最頻繁使用的10大工具總結(jié)

    數(shù)據(jù)可視化是數(shù)據(jù)科學(xué)中不可缺少的一部分,下面這篇文章主要給大家介紹了關(guān)于Python可視化最頻繁使用的10大工具,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • python實(shí)現(xiàn)進(jìn)度條的多種實(shí)現(xiàn)

    python實(shí)現(xiàn)進(jìn)度條的多種實(shí)現(xiàn)

    這篇文章主要介紹了python實(shí)現(xiàn)進(jìn)度條的多種實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python 遠(yuǎn)程開關(guān)機(jī)的方法

    Python 遠(yuǎn)程開關(guān)機(jī)的方法

    這篇文章主要介紹了Python 遠(yuǎn)程開關(guān)機(jī)的方法,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11

最新評論

内黄县| 容城县| 德令哈市| 湄潭县| 海城市| 静海县| 崇州市| 钟祥市| 泽普县| 宾阳县| 隆安县| 北海市| 四川省| 临汾市| 河北区| 四平市| 阜平县| 芦山县| 高要市| 兴文县| 白山市| 闽侯县| 辽宁省| 乌拉特后旗| 金堂县| 普定县| 新源县| 大石桥市| 寻甸| 会宁县| 霍邱县| 长寿区| 廉江市| 江川县| 台山市| 霍邱县| 桂平市| 桃园县| 金塔县| 玛多县| 白银市|