path = zipfilename[2:10] def read_file(path): mm = [m for m,k,w in os.walk(path)] kk = [k for m,k,w in os.walk(path)] ww = [w for m,k,w in os.walk(path)] file_path_1 = [] file_path_2 = [] for i in range(1,len(mm)): path_1 = mm[i] + '/' + ww[i][0] path_2 = mm[i] + '/' + ww[i][1] file_path_1.append(path_1) file_path_2.append(path_2) return file_path_1,file_path_2
4.csvの操作
①ファイルを読み込み、「件数」列は-20に等しい行を削除
1 2 3 4 5 6
def make_dataframe(file_path_1,file_path_2): df_1 = [pd.read_csv(file_path_1[k],encoding='cp932') for k in range(len(file_path_1))] df_2 = [pd.read_csv(file_path_2[k],encoding='cp932') for k in range(len(file_path_2))] df_2 = [k[k['件数'] != -20].reset_index() for k in df_2] df_2 = [k.loc[:,['開始','処理時間','件数']] for k in df_2] return df_1,df_2
def make_file(df_1,df_2): df = pd.concat([df_2,df_1],axis=1) df['サイズ(MB)'] = df['サイズ(Byte)']/(1024**2) ii = [pd.to_datetime(i).time() for i in df_2['処理時間']] time_to_second = [] for i in ii: if i.microsecond: #i.microsecond:int型 s = '%06d' % i.microsecond #int型を文字列に変更する際、頭の0をなくさないようにする if int(s[0]) >= 5: seconds = i.hour*3600 + i.minute*60+ i.second +1 time_to_second.append(seconds) else: seconds = i.hour*3600 + i.minute*60+ i.second time_to_second.append(seconds) else: seconds = i.hour*3600 + i.minute*60+ i.second time_to_second.append(seconds) m,s = divmod(sum(time_to_second),60) h,m = divmod(m,60) sum_time='{0}:{1:02d}:{2:02d}'.format(h,m,s) sum_num = sum(df['件数']) sum_size = sum(df['サイズ(Byte)']) sum_size_MB = sum_size/(1024**2) df.loc['sum'] = ['',sum_time,sum_num,sum_size/1024**3,sum_size,sum_size_MB] return df
5.excelに書き込む
1 2 3 4 5 6 7
def combine_to_excel(list_file_1,list_file_2,list_file_3): list_name = ['list_file_1','list_file_2','list_file_3'] writer = pd.ExcelWriter('20200701.xlsx') for i in list_name: eval(i).to_excel(excel_writer = writer,sheet_name = i,index=False) writer.save() writer.close()
6.残り課題
pyファイルに変えておきたい。
二、2つのフォルダに差になったファイルを新しいフォルダにコピーする
1.差になったファイルを探し出す
1 2 3 4 5 6 7 8 9 10 11 12
import os from shutil import copy
ll=[l for l,m,n in os.walk('./')] nn = [n for l,m,n in os.walk('./')]
#多めにあるフォルダを判定 len(nn[2]) > len(nn[3]) #差になったファイルを判定 file = [i for i in nn[2] if i not in nn[3]] #差になったファイルのパスをつける path=[ll[2]+'/'+i for i in file]
2.新しいフォルダにコピー
1 2 3 4 5
save_dir = './data_new' if not os.path.isdir(save_dir): os.makedirs(save_dir) for i in range(len(path)): copy(path[i],save_dir)
三、フォルダ内のファイルを一括に読み込み、特定のファイルのみ結合する
1.ファイルを一括に読み込み
1 2 3 4 5 6 7 8 9 10
import pandas as pd import os import numpy as np
datas = [] for info in os.listdir("フォルダのパス"): domain = os.path.abspath(r"フォルダのパス") info = os.path.join(domain,info) data = pd.read_csv(info,encoding ='cp932') datas.append(data)
2.特定のファイルのみ結合
indexで指定する
1 2 3
datas_tmp = [] for i in range(len(datas)): datas_tmp.append(datas[:i] + datas[i+1:])
result = [] def unduplicate(result,data): if data not in result: result = result+[data] return result for i in test: result = unduplicate(result,i) result #[{'a': 1}, {'a': 3}, {'b': 2}]
from functools import reduce def delete_duplicate(data): func = lambda x,y :x +[y] if y not in x else x data = reduce(func,[[],] +data) return data delete_duplicate(test) #[{'a': 1}, {'a': 3}, {'b': 2}]
def delete_duplicate(data): dict_ed = set([str(i) for i in data]) data = [eval(i) for i in dict_ed] return data delete_duplicate(test) #[{'b': 2}, {'a': 3}, {'a': 1}]