使い捨て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()