使い捨てPythonスクリプト
作業を自動化するため、最近書いた、ファイル処理のための使い捨てpythonスクリプト。”あの頃はこんなことをやっていたのだなー”と振り返るために記録しておく。
(1)複数ファイルに記録された値を取り出して平均値を算出する
#!/bin/env python ncpu = 2 fileobj = list() factime = list() soltime = list() if ncpu == 2: fileobj.append(open("res.0", "r")) fileobj.append(open("res.1", "r")) elif ncpu == 4: fileobj.append(open("res.0", "r")) fileobj.append(open("res.1", "r")) fileobj.append(open("res.2", "r")) fileobj.append(open("res.3", "r")) elif ncpu == 8: fileobj.append(open("res.0", "r")) fileobj.append(open("res.1", "r")) fileobj.append(open("res.2", "r")) fileobj.append(open("res.3", "r")) fileobj.append(open("res.4", "r")) fileobj.append(open("res.5", "r")) fileobj.append(open("res.6", "r")) fileobj.append(open("res.7", "r")) for j in xrange(ncpu): a = fileobj[j].readlines() for i in a: if i.find('Time1') != -1: factime.append(float(i.split(':')[1])) if i.find('Time2') != -1: soltime.append(float(i.split(':')[1])) sumf = 0.0 sums = 0.0 for i in xrange(len(factime)): sumf += factime[i] sums += soltime[i] print factime print soltime print 'Average time1=',sumf/len(factime) print 'Average time2=',sums/len(factime)
(2)一つのファイルを決められた個数に分割する
#!/bin/env python from decimal import Decimal # ---- basic information to be changed - jobNo = '01' baseName = 'filename' nproc = 2 # -------------------------------------- mtxFile = baseName + '.mtx' rhsFile = baseName + '.rhs' newMatFile = "matrix" + jobNo + "_np" + str(nproc) newRhsFile = "rhs" + jobNo + "_np" + str(nproc) fmtx = open(mtxFile, 'r') frhs = open(rhsFile, 'r') firstLine1= fmtx.readline() firstLine2= frhs.readline() nNum = int(firstLine1.split()[0]) nzNum = int(firstLine1.split()[2]) nNumLocal = nNum /nproc nzNumLocal = nzNum/nproc nNumExtra = nNum %nproc nzNumExtra = nzNum %nproc mtx1Line = str(nNum) + ' ' +str(nNum) + ' ' +str(nzNumLocal) + '\n' mtx1LineL= str(nNum) + ' ' +str(nNum) + ' ' +str(nzNumLocal+nzNumExtra) + '\n' rhs1Line = str(nNumLocal) + ' 1' + '\n' rhs1LineL= str(nNumLocal+nNumExtra) + ' 1' + '\n' for k in xrange(nproc): file = newMatFile + '.' + str(k) wmtx = open(file, 'w') if k != nproc-1: wmtx.write(mtx1Line) totNum = nzNumLocal else: wmtx.write(mtx1LineL) totNum = nzNumLocal + nzNumExtra for i in xrange(totNum): dataLine = fmtx.readline() wmtx.write(dataLine) wmtx.close() for k in xrange(nproc): file = newRhsFile + '.' + str(k) wrhs = open(file, 'w') if k != nproc-1: wrhs.write(rhs1Line) totNum = nNumLocal else: wrhs.write(rhs1LineL) totNum = nNumLocal + nNumExtra for i in xrange(totNum): dataLine = frhs.readline() wrhs.write(dataLine) wrhs.close()