0
2 개의 큰 텍스트 파일 (현재 17MB이지만 GB 일 수 있습니다)은 크기가 RAM 용량을 초과 할 수 있으므로 RAM에로드하지 않으려 고합니다 .파이썬을 사용하여 2 개의 텍스트 파일을 빠르게 비교하십시오.
지금 내가 쓴 코드는 이것이다 : 나는 beforeFile
성공적으로 (예를 들어, if a_line.rstrip() == b_line.rstrip():
가 트리거)
def stopIfFileExist(filename):
if os.path.isfile(filename):
raise Exception("%s already exist" %filename)
def compareDump(before_filename, after_filename, diff_filename):
"""
Compare 2 dumps generated via makeDump(output_filename) and generate
a file containing the differences
-before_filename : (string) filename of the first dump
-after_filename : (string) filename of the second dump
-diff_filename : (string) filename of the diff
"""
stopIfFileExist(diff_filename)
num_lines = sum(1 for line in open(after_filename))
one_percent = num_lines/float(100)
diff = []
start = time.time()
with open(after_filename, "r") as afterFile:
counter = 0
for a_line in afterFile:
print "completion : %.9f percents" %(counter/float(one_percent))
counter = counter + 1
diff.append(a_line)
with open(before_filename, "r") as beforeFile:
for b_line in beforeFile:
if a_line.rstrip() == b_line.rstrip():
diff.pop()
break
end = time.time()
print "task completed in %s seconds" %(end - start)
with open(diff_filename, "a") as diffFile:
for line in diff:
diffFile.write(line)
그러나 현재 파일을 읽고 있으므로 어떻게해야하는지 알지 못합니다.
아이디어가 있으십니까?
감사합니다.
다른 GB 파일의 모든 행에 대해 GB 파일을 읽는 중입니다. 그것은 결코 빠르지 않을 것입니다. 보다 효과적인 해결책을 찾으려면 파일의 내용을 생각해보십시오. 아무 것도 없다면 데이터베이스에 대해 생각해보십시오. – pacholik
다시 말하면 다음과 같이 다시 말해 보겠습니다. 2 개의 거대한 파일의 diff를 만드는 가장 빠른 방법입니다. 이미 발견 된 행을 제거 할 수 있다면 다음 반복에는 약간의 시간이 걸릴 것입니다. –
여전히 * O (n²) *입니다. – pacholik