3つの関数で構成されるこのクラスがあります。各機能は、プロセス全体の一部を担当します。
.load()
2 つのファイルをロードし、それらのコンテンツを再フォーマットして、2 つの新しいファイルに書き込みます。
.compare()
は 2 つのファイルを取得し、それらの違いを特定の形式で出力します。
.final()
の結果を.compare()
取得し、値のセットごとにファイルを作成します。
現時点では私の主な関心事ではないため、ロジックのフランケンシュタインの性質は無視してください。私はそれが1000倍良く書けることを知っています。私はまだPythonとプログラミング全般に慣れていないので、今のところそれで問題ありません。理論的な経験はありますが、技術的な実践は非常に限られています。それは私が取り組んでいるものです。
コードは次のとおりです。
from collections import defaultdict
from operator import itemgetter
from itertools import groupby
from collections import deque
import os
class avs_auto:
def load(self, fileIn1, fileIn2, fileOut1, fileOut2):
with open(fileIn1+'.txt') as fin1, open(fileIn2+'.txt') as fin2:
frame_rects = defaultdict(list)
for row in (map(str, line.split()) for line in fin1):
id, frame, rect = row[0], row[2], [row[3],row[4],row[5],row[6]]
frame_rects[frame].append(id)
frame_rects[frame].append(rect)
for row in (map(str, line.split()) for line in fin2):
id, frame, rect = row[0], row[2], [row[3],row[4],row[5],row[6]]
frame_rects[frame].append(id)
frame_rects[frame].append(rect)
with open(fileOut1+'.txt', 'w') as fout1, open(fileOut2+'.txt', 'w') as fout2:
for frame, rects in sorted(frame_rects.iteritems()):
fout1.write('{{{}:{}}}\n'.format(frame, rects))
fout2.write('{{{}:{}}}\n'.format(frame, rects))
def compare(self, f1, f2):
with open(f1+'.txt', 'r') as fin1:
with open(f2+'.txt', 'r') as fin2:
lines1 = fin1.readlines()
lines2 = fin2.readlines()
diff_lines = [l.strip() for l in lines1 if l not in lines2]
diffs = defaultdict(list)
with open(f1+'x'+f2+'Result.txt', 'w') as fout:
for line in diff_lines:
d = eval(line)
for k in d:
list_ids = d[k]
for i in range(0, len(d[k]), 2):
diffs[d[k][i]].append(k)
for id_ in diffs:
diffs[id_].sort()
for k, g in groupby(enumerate(diffs[id_]), lambda (i, x): i - x):
group = map(itemgetter(1), g)
fout.write('{0} {1} {2}\n'.format(id_, group[0], group[-1]))
def final(self):
with open('hw1load3xhw1load2Result.txt', 'r') as fin:
lines = (line.split() for line in fin)
for k, g in groupby(lines, itemgetter(0)):
fst = next(g)
lst = next(iter(deque(g, 1)), fst)
with open('final/{}.avs'.format(k), 'w') as fout:
fout.write('video0=ImageSource("MovieName\original\%06d.jpeg", {}, {}, 15)\n'.format(fst[1], lst[2]))
私の質問に、各関数が出力ファイルを値として次の関数に渡し、それを呼び出すようにするにはどうすればよいですか?
たとえば、次のようになります。
runningは 2 つのファイルを出力し、それらの 2 つのファイルを渡す関数を.load()
呼び出します。.compare()
が完了すると、出力ファイルを.compare()
渡して呼び出す必要があります。.final()
そのため、上記で定義されたものではなく、.final()
渡されたファイルを開きます。.compare()
"test123.txt"
これがすべて理にかなっていることを願っています。説明が必要な場合はお知らせください。コード自体に関する批判は大歓迎です。前もって感謝します。