이 클래스는 3 개의 함수로 구성됩니다. 각 기능은 전체 프로세스의 한 부분을 담당합니다.다른 함수에서 값 및 호출 함수 전달
.load()
은 두 개의 파일을로드하고 내용의 형식을 다시 지정하며 두 개의 새 파일에 씁니다.
.compare()
은 두 개의 파일을 가져 와서 특정 형식의 차이점을 인쇄합니다.
.final()
은 .compare()
의 결과를 취하여 모든 값 집합에 대한 파일을 만듭니다.
논리의 Frankenstein 특성을 무시하십시오. 현재로서는 내 관심사가 아닙니다. 나는 그것이 천 번 더 좋게 쓰여질 수 있다는 것을 안다. 그리고 나는 여전히 파이썬에 대해 처음이고 일반적으로 프로그래밍하기 때문에 나에게는 괜찮다. 나는 이론적 인 경험이 있지만 기술적 인면이 매우 제한되어 있고 그것이 내가 작업하고있는 어떤 것입니다. 내가 어떻게 그렇게 각 함수는 다음 함수 값으로 출력 파일을 그리고 그것을 호출 통과해야합니까, 내 질문에 이제
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]))
: 여기
코드인가? 그래서 예를 들어는 :
.load()
해야 출력이 개 파일을 실행
, 그것을 두 파일을 통과하는 .compare()
함수를 호출합니다.
그러면 .compare()
이 완료되면 .final()
출력 파일을 전달하고이를 호출해야합니다.
그래서 .final()
은 위에 정의 된대로 .compare()
이 아닌 어떤 파일도 "test123.txt"
에서 열립니다.
나는 이것이 모두 의미가 있기를 바랍니다. 설명이 필요한 경우 알려주십시오. 코드 자체에 대한 비판을 환영합니다. 미리 감사드립니다.
예, 내 부하에서 문제가 발생 했으므로 고맙습니다. 내 유일한 문제는 어떻게 내가 "result_file"final을 open() 라인으로 전달 하는가하는 것입니다. 내가 그렇게한다면 : "with open (result_file + '. txt', 'r') fin :"파일이나 디렉토리를 반환하지 않습니다 ". 나를 올바른 방향으로 인도 할 수 있습니까? – MaxPower
글쎄, 그 오류는 그것이 예상 파일을 찾지 못한다는 것을 의미합니다 - 당신이 그것을주는 위치에 존재하는지 확인해야합니다. 그게'compare'의 결과물이라면, master 함수에서 예상되는 파일 이름을 만들고 아마도 compare와 final의 인수로 넘겨 주면됩니다. –