이 작은 스크립트 파일을 읽는 정규식 각 라인을 일치 시키려고, 다른 파일에 일치하는 라인을 추가합니다 : 왜이 파이썬 스크립트가 파일에 갑자기 쓰는 걸까요?
regex = re.compile(r"<http://dbtropes.org/resource/Film/.*?> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://dbtropes.org/resource/Main/.*?> \.")
with open("dbtropes-v2.nt", "a") as output, open("dbtropes.nt", "rb") as input:
for line in input.readlines():
if re.findall(regex,line):
output.write(line)
input.close()
output.close()
그러나, 스크립트는 갑자기 약 5 분 후에 중지됩니다. 터미널에 "프로세스가 중지되었습니다"라는 메시지가 표시되고 출력 파일이 비어있게됩니다.
입력 파일은 여기에서 다운로드 할 수 있습니다. http://dbtropes.org/static/dbtropes.zip 4.3Go n-triples 파일입니다.
내 코드에 문제가 있습니까? 다른 것입니까? 어떤 힌트 가이 하나에 감사하겠습니다!
'top'을 사용하여 프로세스에서 사용중인 메모리 양을 확인하십시오. 그리고/또는 진행 상황 출력을 추가하십시오. –
부수적으로, 일치하는 항목이 있는지를 확인하는 중이라면'findall'을 원하지 않을 것입니다. 첫 번째 검색 결과가 아니라 모든 검색 결과를 찾기 위해 성능에 큰 영향을 미치지는 않을 것입니다.하지만 도움이되지 않습니다. 개념적으로 약간 혼란 스럽기 때문에 그냥하지 않는 것이 좋습니다. – abarnert
또한 패턴을 정규식 객체로 컴파일하려면 최상위 함수 ('re.findall (regex, line)')가 아닌 그 메소드 ('regex.findall (line)')를 사용하십시오. 성능 영향은 여기에서 더 작을 수 있습니다. 다시 한번 말하면 가독성에 관한 것입니다. (예를 들어 처음 3자를 무시하고 싶다는 말을하고 싶다면이 방법은 더욱 유연합니다. – abarnert