私は、それぞれが441の行と8の列を持つ百万のcsvファイルを持っています。私は各ファイルを開いて、行221に60より大きい列があるかどうかを調べます。もしそうなら、その列のすべての値をすべての行に対して "-1"とします。たとえば
:私は上記の処理を行うたらPython:ファイルを開く速度を改善し、条件に基づいてファイルを変更し、別のファイルにコピーする方法は?
Input
row 220: 65,13,15,27,18,51,20,79
row 221: 25,23,45,67,12,11,23,69
row 222: 12,12,14,15,16,17,19,22
Output
row 220: 65,13,15,-1,18,51,20,-1
row 221: 25,23,45,-1,12,11,23,-1
row 222: 12,12,14,-1,16,17,19,-1
は、私は別のファイルにこの内容をコピーします。私はすべてのファイルについて上記を行います。
コード:
file_list=[]
mypath1=os.path.join(mypath,dut) // dut refers to the directory name
out_path1=os.path.join(mypath1,folder1)
if not os.path.exists(out_path1):
os.mkdir(out_path1)
for i in listdir(mypath1):
if i.startswith("PD") and i.endswith(".csv"):
file_list.append(i)
for j in file_list:
#print j
f = open(os.path.join(mypath1,j),'r')
f5=csv.reader(f)
sec=[]
f5 = list(f5)
for col in range(0,8):
if int(f5[220][col]) <= 60:
sec.append(col)
for r in range(0,441):
for value in sec:
f5[r][value] = -1
filename = "temp1_" + j
f2 = open(os.path.join(out_path1,filename),'w+')
f1=csv.writer(f2)
f1.writerows(f5)
f2.close()
f.close()
flag=1
されたコードが正常に動作しているが、300個の000 CSVファイルの周りに処理に要した時間は約1時間である(別のファイルに、ファイルを開いて上記の操作を行うと、書き込み約0.01秒)。
上記の処理を高速化する他の方法はありますか?私は同じ量のファイルを持つ他の20のディレクトリを持っています。その場合は、合計20時間かかります。
私は変数を 'f5'ではなく感覚的な名前にリファクタリングすることから始めます。 –
おそらく、あなたはRAMにディレクトリを読み込み、それをRAMで修正し、それを書き戻すことができます(Pythonでやる方法はわかりませんが、可能かもしれません)。私はハードドライブへの読み書きはメインのボトルネックであり、大きなチャンクでそれを行うには一括割引があると思います。 –
単にcsvを読み込んで新しいファイルに出力するコードを作成します。その時間。私はあなたのディスクアクセスがあなたの時間の大半を占めているのではなく、Pythonのコードであることがわかると思います –