數據如下圖:
用python對數據進行處理:
#讀取csv文件內容並進行數據處理 import os import csv import datetime import re from itertools import islice csv_file_path = 'query_hive.csv' #文件路徑 write2_csv_file_path = 'hive_result2.csv' #處理第二列數據 write6_csv_file_path = 'hive_result6.csv' #處理第六列數據 #定義一個寫入數據函數 def write_csv_file(): if os.path.exists(csv_file_path) is False : print("不存在文件鴨!") return with open(csv_file_path,'r') as r_file: #讀取csv文件內的所有內容 file_read = csv.reader(r_file) for row in islice(file_read,1,None): #如果第一行是列名,用islice函數直接跳過第一行 islice(文件名,跳過的行數,None) print(row) #處理第六列數據 row6 = row[5] #第六列數據 len_str6 = len(row6) #第六列數據的長度 print("此列字符串的長度:{}".format(len_str6)) L_str6 = list(row6[1:len_str6-1].split('|')) #對第六列數據進行分割得到數字字符串列表 print("此列得到數字字符串列表:{}".format(L_str6)) L_num6 = list() #創建一個空列表存儲數據 for s in L_str6: #將字符串列表變為數字型列表 if s=='' : L_num6.append(0) else: L_num6.append(int(s)) print("此列得到數字型數據列表{}".format(L_num6)) #處理第一列數據 row2 = row[1] #第一列數據 len_str2 = len(row2) #第一列數據的長度 print("此列數據串的長度".format(len_str2)) L_str2 = list(re.split("[/.]",row2[1:])) #用多個分隔符分割字符串 print("此列得到字符串列表{}".format(L_str2)) #寫入2數據 csv_write_list = [L_str2] #用於寫入文件的數據 with open(write2_csv_file_path,'a',newline='') as w_file: #若沒有newline=''每讀入一行數據后跟一個空行 writer = csv.writer(w_file,dialect='excel') for row_item in csv_write_list: writer.writerow(row_item) #寫入6數據 csv_write_list = [L_str6] with open(write6_csv_file_path,'a',newline='') as w_file: #若沒有newline=''每讀入一行數據后跟一個空行 writer = csv.writer(w_file,dialect='excel') for row_item in csv_write_list: writer.writerow(row_item) if __name__ == "__main__": write_csv_file() #注意 ''' 1)寫入文件數據的時候,只能以字符串的格式寫入! 2)L_str 是處理之后的字符串列表,若要將其寫入文件中,還需要進一步操作:將其作為新列表的一個元素進行讀入 暨csv_write_list = [L_str6] 3)如果打開待寫入文件時沒有參數 newline='' ,那么最后的文件中每一數據行后都有一個空行 4)如果數據文件第一行是列名,用islice函數直接跳過第一行 islice(文件名,跳過的行數,None) '''