国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python用list或dict字段模式讀取文件的方法

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

前言

Python用于處理文本數據絕對是個利器,極為簡單的讀取、分割、過濾、轉換支持,使得開發者不需要考慮繁雜的流文件處理過程(相對于JAVA來說的,嘻嘻)。博主自己工作中,一些復雜的文本數據處理計算,包括在HADOOP上編寫Streaming程序,均是用Python完成。

而在文本處理的過程中,將文件加載內存中是第一步,這就涉及到怎樣將文件中的某一列映射到具體的變量的過程,最最愚笨的方法,就是按照字段的下標進行引用,比如這樣子:

# fields是讀取了一行,并且按照分隔符分割之后的列表user_id = fields[0]user_name = fields[1]user_type = fields[2]

如果按照這種方式讀取,一旦文件有順序、增減列的變動,代碼的維護是個噩夢,這種代碼一定要杜絕。

本文推薦兩種優雅的方式來讀取數據,都是先配置字段模式,然后按照模式讀取,而模式則有字典模式和列表模式兩種形式;

讀取文件,按照分隔符分割成字段數據列表

首先讀取文件,按照分隔符分割每一行的數據,返回字段列表,以便后續處理。

代碼如下:

def read_file_data(filepath): '''根據路徑按行讀取文件, 參數filepath:文件的絕對路徑 @param filepath: 讀取文件的路徑 @return: 按/t分割后的每行的數據列表 ''' fin = open(filepath, 'r') for line in fin:  try:   line = line[:-1]   if not line: continue  except:   continue    try:   fields = line.split("/t")  except:   continue  # 拋出當前行的分割列表  yield fields fin.close()

使用yield關鍵字,每次拋出單個行的分割數據,這樣在調度程序中可以用for fields in read_file_data(fpath)的方式讀取每一行。

映射到模型之方法1:使用配置好的字典模式,裝配讀取的數據列表

這種方法配置一個{“字段名”: 字段位置}的字典作為數據模式,然后按照該模式裝配讀取的列表數據,最后實現用字典的方式訪問數據。

所使用的函數:

@staticmethoddef map_fields_dict_schema(fields, dict_schema): """根據字段的模式,返回模式和數據值的對應值;例如 fields為['a','b','c'],schema為{'name':0, 'age':1},那么就返回{'name':'a','age':'b'} @param fields: 包含有數據的數組,一般是通過對一個Line String通過按照/t分割得到 @param dict_schema: 一個詞典,key是字段名稱,value是字段的位置; @return: 詞典,key是字段名稱,value是字段值 """ pdict = {} for fstr, findex in dict_schema.iteritems():  pdict[fstr] = str(fields[int(findex)]) return pdict

有了該方法和之前的方法,可以用以下的方式讀取數據:

# coding:utf8"""@author: www.crazyant.net測試使用字典模式加載數據列表優點:對于多列文件,只通過配置需要讀取的字段,就能讀取對應列的數據缺點:如果字段較多,每個字段的位置配置,較為麻煩"""import file_utilimport pprint # 配置好的要讀取的字典模式,可以只配置自己關心的列的位置dict_schema = {"userid":0, "username":1, "usertype":2}for fields in file_util.FileUtil.read_file_data("userfile.txt"): # 將字段列表,按照字典模式進行映射 dict_fields = file_util.FileUtil.map_fields_dict_schema(fields, dict_schema) pprint.pprint(dict_fields)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台南县| 钦州市| 南宁市| 内黄县| 灵丘县| 麦盖提县| 沂南县| 新绛县| 封丘县| 金湖县| 辽中县| 石家庄市| 清涧县| 屏边| 历史| 玉田县| 永吉县| 桐乡市| 龙州县| 镇远县| 左权县| 连城县| 垫江县| 尚志市| 敖汉旗| 玉溪市| 土默特右旗| 太和县| 瑞丽市| 太仆寺旗| 宁德市| 镇平县| 临清市| 陆河县| 黎川县| 乐平市| 镇巴县| 双辽市| 金川县| 福海县| 安达市|