2009-12-26 8 views
0

나는 독특한 문제가 있습니다. 파이썬을 사용하여 미리 정의 된 오프셋 범위에있는 부분 문자열 만 읽어야합니다 (txt 파일에서). 5-8과 12-16을 가정 해 봅시다. 파일의 라인이 경우파이썬에서 형식화 된 입력

예를 들어, 같은 :

abcdefghi akdhflskdhfhglskdjfhghsldk 

는 내가 두 단어를 읽고 싶다 - "EFGH"와 "kdhfl을". 왜냐하면 "efgh"라는 단어에서 문자 "e"의 오프셋은 5이고 "h"의 오프셋은 8이기 때문에, 다른 단어 "kdhfl".

공백은 오프셋에도 추가됩니다. 사실, 내 파일의 공백은 모든 줄에서 "일관되게 발생하지"않으며 관심있는 단어를 추출하는 데 의존 할 수 없습니다. 그래서 나는 상쇄를해야한다.

나는 질문을 분명히 할 수 있었으면 좋겠다.

답변을 기다리고 있습니다!

편집 -

예는, 각 행의 공백 양을 변경하고 또한 오프셋 (offset)를 차지하고있다. 예를 들어,이 두 줄을 고려해보십시오.

abcz d 
a bc d 

두 경우 모두 최종 문자 "d"의 오프셋을 동일하게 봅니다. 앞에서 말했듯이 파일의 공백은 일관성이 없기 때문에 나는 그 파일에 의존 할 수 없습니다. 오프셋을 기준으로 문자를 선택해야합니다. 당신의 대답은 아직 성립합니까?

답변

5

,

for line in open("file"): 
    print line[4:8] , line[11:16] 
1

오프셋에서 조각을 추출하려면 각 줄을 문자열로 읽은 다음 조각 ([from : to])이있는 부분 문자열에 액세스하면됩니다.

일관성없는 공백에 대해 무엇을 말하고 있는지 명확하지 않습니다. 공백 문자가 오프셋에 추가되면 의미있는 것으로 일관되어야합니다. 공백의 크기는 변경 될 수 있지만 실제로 오프셋을 고려하면 안정적으로 데이터를 추출 할 수 없습니다.

추가 된 예제에서 d 's 오프셋이 그대로 유지되면 조각으로 추출 할 수 있습니다.

>>> s = 'a bc d' 
>>> s[5:6] 
'd' 
>>> s = 'abc d' 
>>> s[5:6] 
'd' 
+0

예, 공백 양을 변경하고 또한 오프셋 (offset)를 차지하고있다. I는 동일하여 최종 문자 "D"의 오프셋을보고, 두 경우 ABC D 기원전 d를 - 예를 들어, 다음 두 라인을 고려한다. 내가 말했듯이, 파일의 공백은 일관성이 없기 때문에 나는 그 파일에 의지 할 수 없다. 오프셋을 기준으로 문자를 선택해야합니다. 답변이 아직 유효합니까? – Gitmo

+0

죄송합니다. 위의 내용을 무시하십시오. 분명하지 않아. 대신에 주요 질문을 편집했습니다. – Gitmo

+0

@Eli 고마워요. 저는 파이썬의 초보자입니다. 이제 나는 그 질문이 매우 사소하다는 것을 느낀다.죄송합니다. 귀찮게 생각합니다. – Gitmo

-1

정규식을 사용하지 않으려면 어떻게해야합니까? 공백 외에 오프셋은 다양합니까? 그에게 파일을 가정

/.{4}(.{4}).{4}(.{4})/ 
+0

제 질문을 좀 더 명확하게 편집했습니다. 나는 당신의 해결책을 이해할 수 없었지만 여전히 견뎌 낼 수 있습니까? – Gitmo

+1

정규식은 모든 것을위한 도구가 아닙니다. 상수 인덱스에서 데이터를 추출하는 경우 단순 슬라이스가 훨씬 명확하고 훨씬 빠릅니다. –

+0

단순 슬라이스 또는 문자열 메서드로는 충분하지 않을 것이라고 판단 할 때까지 정규식을 저장하십시오. 파이썬 문자열에는 여러 가지 훌륭한 메소드가 있습니다. "^ 접두사"와 일치하는 RE를 만들고 re.match를 호출하는 대신 s.startswith ("prefix"); endswith와 비슷합니다. 이 경우, 문자열 분할은 슬래시와 점보다 * 먼 * 선호됩니다. – PaulMcG

관련 문제