파일에서 'path :'토큰을 찾아 내려고 다음 숫자 (임의의 숫자)를 숫자로 읽으려고합니다 (': path, 123 '파일을 찾은 다음 정수 123을 읽습니다.) 그런 다음 현재 탐색 위치와 pos + 123 사이의 문자를 읽습니다 (목록에 저장하거나 무엇이든). 그런 다음 ': 경로'와 일치 할 때까지 탐색하고 프로세스를 반복하십시오.파이썬을 사용하여 큰 파일에서 regex를 찾으십시오.
나는 기능을 원하는조금 같은 :
def fregseek(FILE, current_seek, /regex/): . . value_found = ? # result of reading next N chars after :path,[0-9]+ . . return next_start_seek, value_found
가에 대한 일치의 모든 숫자가 될 수 있습니다 라인에서 '경로', 그 문자열이 다음에 지정된 문자의 수 내에서 발생할 수 있습니다 ' , '. 각 줄에서 읽는 지저분한 쓰레기를 작성한 다음, 일치로 표시된 첫 번째 N 개의 문자의 각 줄 촘촘한 부분에 대해 쓰고 그 문자열이 모두 먹힐 때까지 계속 처리합니다. 그런 다음 다음 문자열을 읽습니다.
이것은 정말 끔찍한 일로, 정말로해야 할 일이있을 때 잠재적으로 거대한 파일의 모든 줄을 버리고 싶지 않습니다. (특히 줄 바꿈은 관련이 없으므로 추가 처리 단계가 필요합니다. 라인은 파일에서 끌어 오기가 쉽지 않다.).
그래서,저기서 저의 문제는 해결하고 싶습니다. 나는 경기를 찾고, 가치를 읽고, 다음 경기를 기다리고있는 그 가치의 끝에서부터 계속하고 파일이 고갈 될 때까지 계속해야합니다.
사람이 나를 도울 수 있다면 나는 :) 그들로부터 듣고 행복 할 것이다
나는 가능하면 표준이 아닌 라이브러리를 피하기 위해 싶습니다, 나는이 최소한의 것입니다 또한 짧은 코드처럼하지만 것 내 관심사 (속도와 메모리 소비가 중요한 요인이지만, 나는 단지 그것이 무엇인지 알았다면 그 안에 작은 기능이있는 라이브러리를 부트 스트랩하기 위해 50 loc를 추가하기를 원하지 않는다.)
필자는이 점에서 파이썬이 파이썬보다 뛰어나다면 perl을 대신 사용할 것이며, 끔찍하게 느리지 만 않으면 영리한 sed/awk/bash 스크립트 등도 열어 둡니다.
대단히 감사드립니다.
정규식을 사용해야합니까? ": path"와 같은 토큰을 찾으려는 경우 불필요하며 문자열 검색 만하면 더 쉽고 효율적입니다. – abarnert
또한 검색에 대해 계속 이야기하지만 모든 바이트를 검색하지 않고 검색을 수행 할 방법이 없으며 한 번에 할 수없는 것을 볼 수 없으므로 왜 필요한지 확실하지 않습니다. 전혀 추구. – abarnert
의견 주셔서 감사합니다. 한 번에 전체 파일을 읽을 필요가 없다면 문자열 검색이 좋습니다. 그러나 내가 읽은 모든 덩어리를 효율적으로 처리해야합니다. 모든 것을 읽는 것보다 더 좋은 방법이 있는지 확실하지 않습니다. , 비록 내가 임의로 큰 파일을 처리 할 수 싶습니다. 이상적으로 벤치마킹 할 수있는 몇 가지 옵션이 있지만 지금은 내 진절머리 난 코드가 있습니다. 이미 현재 가지고있는 것보다 훨씬 나은 답변이 이미 있습니다. – sillyMunky