2017-11-09 1 views
0

파이썬 2.6에서는 파일을 행 (문자열)으로 검색하고 발견 한 후 파일에 행을 삽입하는보다 효율적인 방법이 있습니까? 따라서 출력 파일은 몇 줄을 추가 한 입력 파일과 동일합니다. 또한 파일이 매우 클 수 있기 때문에 이러한 파일을 버퍼로 읽지 않을 것입니다.파일의 행 사이에 새로운 데이터를 삽입하는 가장 효율적인 방법

지금 당장 필자는 찾고자하는 줄을 찾은 다음 임시 파일에 여분의 데이터를 삽입 할 때까지 줄 단위로 파일을 읽고 임시 파일에 쓰고 있습니다. 나머지 데이터는 임시 파일에 씁니다. 파일 처리가 끝나면 이전 파일을 새 임시 파일로 덮어 씁니다. 이 같은 뭔가 : 어떻게 든 그것을 속도를 높일 수있는 경우

with open(file_in_read, 'r') as inFile: 
     if os.path.exists(file_in_write): 
     os.remove(file_in_write) 
     with open(file_in_write, 'a') as outFile: 
     for line in inFile: 
      if re.search((r'<search_string',line): 
      write_some_data(outFile) 
      outFile.write(line) 
      else: 
       outFile.write(line) 
os.rename(src,dst) 

난 그냥 궁금 해서요.

+1

가능한 중복 https://stackoverflow.com/questions/1325905/inserting-line-at-specified-position- : 당신은 당신의 코드를 단순화 할 수 있습니다 텍스트 파일) –

답변

0

표준 라이브러리에서 fileinput 모듈을 사용하는 것처럼 보입니다.

import fileinput 
import re 
import sys 

regex = re.compile(r'<pattern>') 

for line in fileinput.input(file_in_read, inplace=True): 
    sys.stdout.write(line) 
    if regex.search(line): 
     sys.stdout.write(additional_lines) 
([텍스트 파일의 지정된 위치에 삽입 라인]의
0

file.seek으로 파일의 일부 지점을 찾고 그곳에 쓸 수는 있지만,이 방법으로 데이터는 파일에서 고정 오프셋을 갖게되며 이는 일반적으로 원하는 것이 아닙니다.

데이터가 다른 데이터를 따라 가야하고 고정 된 오프셋 및 크기가없는 경우에는 데이터가 읽히지 않고 오프셋 및 크기를 알아야합니다.

x, y 문제가있을 수 있습니다. y가 x를 풀 수 있다고 생각할 때 x에 대한 도움을 요청하는 대신 y에 대한 도움을 요청합니다. 이 파일들로 얻으려는 것을 공유한다면 다른 사람들은 더 나은 해결책을 제안 할 수 있습니다.

관련 문제