2015-01-30 4 views
1

이상한 일이 많은 코드를 작성하고 있습니다. 그 이상한 것들 중 하나는 combined.glm라는 파일을 생성하고이 파일의 내용은 다음과 같습니다이다파이썬을 사용하여 텍스트 파일의 데이터를 재배치 할 때 문제가 발생했습니다.

내가 바로 line_conf 섹션 후, line_ug 섹션 즉, 위의 모든 nod_l 섹션을 이동하려는
object line_space { 
    content; 
    content; 
} 

object line_conf { 
    content; 
    content; 
} 
#2 more line_conf objects 

object line_ug { 
    content; 
    content; 
} 
#70 more line_ug 

object nod_l { 
    content; 
    content; 
} 
#65 more nod_l 

. 내가하려고하는 방식은 다음과 같습니다.

하지만 내 머리 속에는 이것이 의미가 있습니다. 나는 대략 null 문자와 약 16 line_ug 다음에 nod_l을 많이 복사하고 부러지기 때문에 약 28 nod_l이 제대로 복사됩니다. 무슨 일이 일어나고 있는지 잘 모르겠습니다.

+0

견고한 파서와 사용하기 쉬운 인터페이스를 작성해야합니다. 그 외 모든 것은 생각할 필요가 없습니다. 시간을 들여 몇 가지 청결한 수업을 가진 작은 도서관을 만들면 끝난 것입니다. – tamasgal

+0

... 아니면 게으른 경로로 가서 정규식을 작성할 수 있습니다. – L3viathan

+1

_your_ 코드가 해당 파일을 생성 한 경우 원하는 순서로 파일을 생성하도록 _that_ 코드를 변경하는 것이 어떻습니까? 파일이 잘못된 순서로 생성 된 후에는 파일을 재정렬하는 것보다 확실히 쉬울 것입니다. –

답변

2

이것은 더럽지 만 작동합니다.

import re 

old = open("combined.glm").read() 

space = re.compile("object line_space {.*?}",re.DOTALL + re.MULTILINE) 
conf = re.compile("object line_conf {.*?}",re.DOTALL + re.MULTILINE) 
ug = re.compile("object line_ug {.*?}",re.DOTALL + re.MULTILINE) 
nod = re.compile("object nod_l {.*?}",re.DOTALL + re.MULTILINE) 

all_space = space.findall(old) 
all_conf = conf.findall(old) 
all_ug = ug.findall(old) 
all_nod = nod.findall(old) 

with open("combined_order.glm","w") as f: 
    for thing in all_space: 
     f.write(thing + "\n\n") 
    for thing in all_conf: 
     f.write(thing + "\n\n") 
    for thing in all_nod: 
     f.write(thing + "\n\n") 
    for thing in all_ug: 
     f.write(thing + "\n\n") 
+0

몇 줄의 코드를 실제로 내 코드에서 사용할 수 있습니다.하지만이 시도하고 다른 코드에서 (같은 코드에서) 도움이 될 수도 있습니다. 코드의 섹션을 시도하려면 새 콘솔에서 시도했지만 있지만 빈'combined_order.glm' 파일 생성. –

+0

예제 파일과 함께 사용하면 작동합니다. – L3viathan

+0

그래, 작동하지만 다른 방법으로 해결 ... 내 질문에 대답 :) –

관련 문제