1. 程式人生 > 實用技巧 >python每日一練之讀取檔案到字典

python每日一練之讀取檔案到字典

學python最重要的是練習,學了不練假把式。每天找點有意思的練習題做做,強化python技能很有裨益。
需求:現有list.txt檔案存放了商品銷售資料,需要讀取該檔案到字典列表。

​ 檔案內容:
​ 商品,單價,數量
​ 蘋果,4.8,5
​ 雪梨,2.9,10
​ 大棗,5.8,6

​ 預期結果是:
​ [{'商品': '蘋果', '單價': '4.8', '數量': '5'},
​ {'商品': '雪梨', '單價': '2.9', '數量': '10'},
​ {'商品': '大棗', '單價': '5.8', '數量': '6'}]

先做分析:檔案是文字檔案,uf8編碼,用open預設r模式開啟即可。第一行內容判斷為字典的key,後面的行是value。

with open('a.txt', encoding='utf8') as f:
    name = f.readline().strip().split(',')  # 讀取檔案第一行轉成list,作為字典的key
    fruit_list = []
    for line in f:  # 用for迴圈遍歷控制代碼f,優點是無論檔案有多大,讀取都不會撐爆記憶體。
        # 不要用read()或readlines(),萬一處理的檔案超大會導致撐爆記憶體。
        if len(line) < 3:  # 過濾空行及資料不完整的行。
            continue
        line = line.strip().split(',')  # 將檔案內容按','分隔轉成列表
        fruit_dict = {}  # 宣告一空字典,儲存每一行的內容
        for i in range(len(name)):  # 通過下標遍歷name列表
            fruit_dict[name[i]] = line[i]
        fruit_list.append(fruit_dict)
    print(fruit_list)

寫完感覺不完美,最好是封裝成函式,利於程式碼複用。

最終版本是:

def file_to_list(file):
    '''
    @param file: 引數是檔名,檔案格式是以','分隔的txt檔案。
    @return: 返回一個列表,列表元素是字典,內容源自file檔案。
    '''

    with open(file, encoding='utf8') as f:
        name = f.readline().strip().split(',')  # 讀取檔案第一行作為字典的key
        fruit_list = []
        for line in f: 
            if len(line) < 3:  # 過濾空行及資料不完整的行。
                continue
            line = line.split(',') 
            fruit_dict = {} 
            for i in range(len(name)):  # 遍歷name列表,將每行對應內容做成字典
                fruit_dict[name[i]] = line[i].strip()
            fruit_list.append(fruit_dict) 
    return fruit_list

至此,讀取檔案到字典練習完畢。

總結:
一是在開始學python時就要養成好習慣,將功能模組化,提高程式碼複用率和可讀性。
二是定義方法要寫文件註釋,方法引數和返回值要解釋清楚。
三是程式碼註釋不用每行都寫,重點是講清楚程式碼邏輯。