亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

python 解決動態的定義變量名,并給其賦值的方法(大數據處理)

2020-02-15 23:37:15
字體:
來源:轉載
供稿:網友

最近消費kafka數據到磁盤的時候遇到了這樣的問題:

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

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

嘗試:中間過程想到了動態定義變量名,即

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

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

定義文件計數器:seven + ‘_num' = 0

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

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

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

定義一個字典用來存計數器,字典的每一個鍵對應一個文件名,值對應當前計數,并實時更新;

定義一個字典用來存時間戳,鍵對應一個文件名,值對應時間戳,達到100條就更新一次;

定義一個字典用來存大類,鍵對應代號,值對應分類;

局部功能代碼如下:

def kafka_to_disk(): print('啟動前檢測上次運行時是否存在意外中斷的數據文件......') print('搜索最近一次執行腳本產生的時間目錄......') # 待處理臨時文件列表 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('上次運行程序產生的臨時文件有---{}'.format(tmp_list)) except Exception as e:  pass if len(tmp_list) == 0:  print('未掃描任何殘留臨時文件') else:  print('開始修復殘留臨時文件......') tmp_num = 0 for tmp in tmp_list:  os.rename(tmp, tmp.split('.')[0]+'.out')  tmp_num += 1 print('本次啟動共修復殘留臨時文件★★★★★-----{}個-----★★★★★'.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() # 初始化毫秒級時間戳 : 20180509103015125 consumer = KafkaConsumer(topic, group_id=group_id, auto_offset_reset=auto_offset_reset, bootstrap_servers=eval(bootstrap_servers)) print('連接kafka成功,數據篩選中......') file_poor = {}       # 子類池用于文件計數器 time_stamp_poor = {}     # 子類時間戳池,用于觸發文件切換 time_stamp = utils.get_time_stamp()  # 初始化毫秒級時間戳 :20180509103015125 for message in consumer:  # 提取第8個字段自動匹配目錄進行創建  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個字段,用于生成文件名  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'   # 給每一個文件設定一個計數器  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   # 觸發切換文件的操作,用時間戳生成第二文件名  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            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜免费在线观看精品视频| 91系列在线播放| 欧美人与性动交a欧美精品| 中文字幕久久久av一区| 国产欧美一区二区三区视频| 日韩中文字幕免费视频| 最新的欧美黄色| 欧美一级在线播放| www.亚洲一区| 黑人精品xxx一区一二区| 中文字幕国产日韩| 亚洲天堂男人天堂| 亚洲精品小视频在线观看| 欧美又大又粗又长| 97高清免费视频| 精品无人区太爽高潮在线播放| 在线观看日韩欧美| 国产在线观看一区二区三区| 日韩av免费观影| 国产精品精品久久久| 中文字幕亚洲欧美一区二区三区| 国产99在线|中文| 红桃视频成人在线观看| 久久免费高清视频| 日韩精品免费观看| 欧美精品久久久久a| 欧美肥老太性生活视频| 精品一区二区三区三区| 日韩精品在线第一页| 久久露脸国产精品| 一区二区三区四区在线观看视频| 亚洲人午夜精品免费| 91欧美精品午夜性色福利在线| 精品久久久久久久大神国产| 精品综合久久久久久97| 日韩精品极品视频免费观看| 成人欧美在线观看| 热门国产精品亚洲第一区在线| 国产97色在线|日韩| 欧美亚洲视频在线观看| 国产精品久久久一区| 精品国产视频在线| 久久国产精彩视频| 国产精品99蜜臀久久不卡二区| 国产日韩欧美视频| 57pao成人国产永久免费| 97国产suv精品一区二区62| 亚洲成人黄色在线| 欧美国产日韩一区二区三区| 一本久久综合亚洲鲁鲁| 欧美另类交人妖| 亚洲图中文字幕| 95av在线视频| 亚洲成人精品久久久| 亚洲人成在线一二| 日韩欧美在线网址| 亚洲精品自在久久| 欧美日韩一区二区三区| 国产精品黄色av| 亚洲a级在线观看| 久久九九国产精品怡红院| 亚洲国产精品成人精品| 不卡中文字幕av| 日韩在线视频免费观看高清中文| 另类色图亚洲色图| 永久免费看mv网站入口亚洲| 国产高清在线不卡| 97在线免费观看| 国产精品18久久久久久麻辣| 日韩视频免费看| 欧美高清第一页| 欧美在线观看一区二区三区| 亚洲一区av在线播放| 亚洲一区免费网站| 欧美俄罗斯乱妇| 亚洲精品久久7777777| 亚洲精品成a人在线观看| 亚洲免费电影一区| 久久久亚洲福利精品午夜| 日韩国产高清污视频在线观看| 97免费视频在线| 亚洲一区中文字幕在线观看| 成人免费xxxxx在线观看| 欧美精品在线视频观看| 最近2019年日本中文免费字幕| 国产日韩欧美视频在线| 日韩精品小视频| 欧美午夜片在线免费观看| 精品视频在线观看日韩| 91在线观看免费| 国产视频精品自拍| 久久精品国产一区二区三区| 欧美亚洲一区在线| 亚洲欧美激情精品一区二区| 久久成人人人人精品欧| 国产成人一区三区| 精品中文字幕在线| 日韩黄色在线免费观看| 成人一区二区电影| 日韩激情av在线播放| 91色琪琪电影亚洲精品久久| 国产精品自产拍在线观看中文| 色综合久久悠悠| 91久久精品视频| 91精品国产综合久久久久久蜜臀| 久久综合亚洲社区| 高跟丝袜欧美一区| 成人久久一区二区| 国产成人综合一区二区三区| 91在线观看免费| 亚洲黄色www| 日本午夜人人精品| 欧美中文在线观看| 亚洲国产古装精品网站| 日韩国产激情在线| 亚洲高清av在线| 国模极品一区二区三区| 久久久久999| 久久天天躁狠狠躁夜夜av| 欧美激情三级免费| 精品福利在线视频| 国产精品网站大全| 狠狠色噜噜狠狠狠狠97| 久久av在线播放| 91成人福利在线| 欧美精品一区二区免费| 精品中文字幕在线观看| 热99精品里视频精品| 国产91对白在线播放| 国产成人精品日本亚洲专区61| 国产精品精品视频一区二区三区| 欧美日韩不卡合集视频| 亚洲精品理论电影| 欧美日韩中文字幕综合视频| 欧美日韩ab片| 久久99精品国产99久久6尤物| 日本欧美中文字幕| 91国产美女在线观看| 国产精品激情自拍| 国产精品影院在线观看| 亚洲日本aⅴ片在线观看香蕉| 午夜精品一区二区三区在线| 亚洲二区中文字幕| 日韩中文字幕亚洲| 亚洲精品ady| 欧美电影免费观看高清完整| 欧美日韩一区二区三区在线免费观看| 91成品人片a无限观看| www.国产精品一二区| 在线视频国产日韩| 欧美最顶级的aⅴ艳星| 精品亚洲国产成av人片传媒| 中文字幕日韩有码| 色青青草原桃花久久综合| 日韩第一页在线| www.日韩欧美| 亚洲精品一区二区三区不| 久久久久久久久久亚洲| 伊人亚洲福利一区二区三区| 成人午夜高潮视频| 精品免费在线视频| 日韩av片电影专区| 成人激情视频免费在线| 欧美性视频网站|