-1
나는 머리말과 꼬리말이있는 파일 (html) 템플릿을 가지고 있습니다. <trbody>
다음에 텍스트를 삽입하려고합니다. 내가 지금 그것을하고 있어요 방법은 내가 내 HTML 테이블에 추가 할 필요가 각 테이블 라인이 전화 fileinput.input()
모든 파일을 읽지 않고 파일에 쓰기
def write_to_html(self,path):
for line in fileinput.input(path, inplace=1):
line = re.sub(r'CURRENT_APPLICATION', obj, line)
line = re.sub(r'IN_PROGRESS', time.strftime("%Y-%m-%d %H:%M:%S"), line)
line = re.sub(r'CURRENT_VERSION', svers, line)
print line, # preserve old content
if "<tbody>" in line:
print ("<tr>")
###PRINT MY STUFFS
print ("</tr>")
함께. 하지만 난 약 5k 테이블 라인을 추가 할 수 있습니다 (각 라인은 hmtl 코드의 약 30 라인)입니다. 그것은 빠르게 시작하지만 각 라인은 추가 될 때까지 더 많은 시간이 걸립니다. 각 행에 대해 파일을 다시 작성해야하기 때문입니다.
프로세스 속도를 높일 방법이 있습니까?
답장을 보내 주셔서 감사합니다. 큰 문자열을 만드는 데 이상적이며 방금 한 번 파일을 통과합니다. 내가 보여준 함수가 클래스에 있기 때문에 지금부터는 몇 가지 요소를 변경해야합니다. 내 주요 프로그램에서는 .json이 들어있는 폴더를 반복합니다.
block_of_lines=''
for json in jsonfolder :
Object_a = CLASS-A(json) #unserialization
block_of_line += Object_a.to_html_sting()
Create_html(block_of_line)
가 빨리 될 것이다 :
는for json in jsonfolder :
Object_a = CLASS-A(json) #unserialization
Object_a.write_to_html() (the function i showed)
은 그게로 설정해야 ?
정확하게 이해하면이 파일의 어딘가에 '
'이 있는데, 위의 코드를 5,000 번 실행하면 '예제에 "### PRINT MY STUFFS"라는 주석이있는 곳에서 전화를 걸면 그 시점에서 5k 줄을 모두 인쇄 한 다음 5k 번이 아니라 한 번만 예제 코드를 호출 할 수 있습니까? 또한 각 행이
바로 뒤에 삽입되기 때문에 테이블 행을 역순으로 전달하는 예제 코드를 호출한다는 의미입니다. 즉, 앞선 행 바로 위에 - 힘든 작업처럼 보입니다. –inplace 쓰기 대신 다른 파일에 저장하려고 시도 했습니까? – citaret
답변
몇 번 더 질문을 다시 읽으면 다음과 같은 생각이 들게됩니다. 글을 머리글, 표 줄, 바닥 글에 대해 3 개의 블록으로 나눌 수 있습니까? 오히려 그 세 대체 라인이 무엇을하는지에 의존하는 것처럼 보이지만, 맞다면 템플릿을 처음 사용할 때만 업데이트 할 수 있습니다. 첫 번째 json 파일에서 작동하고 다른 파일에서는 변경되지 않습니다.
그런 다음 클래스에, 헤더를 작성하고 (에서 복사본을 사용 즉, (그들이 클래스에서보다는 인스턴스에서 사용할 수있는 의미)와 같은 정적 메서드를 바닥 글에 두 개의 새로운 함수를 정의 당신이 '인플레 이스'를 편집하고 그 템플릿 GET의 덮어 의미하지 않으며, 따라서 그것은 하나의 사용 형태의 템플릿의 점점 더 이유를 자신의 코드)이 궁금 않습니다. 일반적으로 템플릿을 사용할 때 템플릿에서 읽어 들여 새 파일에 템플릿의 편집 된 버전을 작성합니다. 따라서 템플릿은 다시 시간과 시간을 재사용 할 수 있습니다.
바닥 글 섹션의 경우 추가 모드에서 파일을 연 다음 머리글 쓰기 기능을 호출하여 만든 바닥 글 배열에 해당 줄을 씁니다.
템플릿을 편집하지 않으면 도움이 될 것이라고 생각합니다.
이렇게하면 json 파일을 반복하면서 작성한 파일의 비트를 다시 읽지 않아도됩니다. 또한 우려되는 경우 전체 파일을 메모리에 저장하려고하지 않습니다.
출처
2016-09-01 14:55:30
나는'copy (template.html, path)'를 수행하는 함수를 가지고있다. 이것은 좋은 방법입니다. 나는 그것에 대해 연구 할 것이다. – pwnsauce
5000 줄이 없습니다.
그런 다음 각 행을 처리하고 결국 하나 개의 문자열에 가입하고 다시 파일의 전체 일을 쓰기 : 라인의 목록을 가져올 수
f.readlines()
를 사용하여 전체 파일을 읽습니다.출처
2016-09-01 08:40:16
5000 테이블 라인 ---> 각 테이블 라인은 30 html 코드 라인이므로 최종 파일에서 150k 라인입니다. 그러나 테이블 행을 추가 할 때마다'30 X number_of_table_line_already_in'을 읽습니다. 총 끝에 읽은 줄 수는 30 (1 + 2 + 3 + ... + 5000)입니다. – pwnsauce
나는이 모든 것을 읽으려고 노력해야한다고 생각합니다. 잃을 게 뭐야? 당신이 할 경우, 코멘트를 추가하십시오 ... –
그것은 지금 내가 뭘하는지, 나는 375KK 라인을 읽는 것을 끝낸다. (출력하는데 약 10 분 걸린다.) – pwnsauce
관련 문제