2014-03-29 6 views
0

텍스트 파일에 수백 개가 들어있는 경우,텍스트 파일의 특정 줄을 파이썬 목록에 넣을 수 있습니까?

<Vertex> 0 { 
    -10.6272 8.71309 10.8633 
    <UV> { 0.724203 0.210816 } 
    <RGBA> { 0.916 0.609 0.439 1 } 
} 

파이썬이 텍스트 파일을 통과하여 두 번째 줄을 입력하도록하려면 어떻게해야합니까? -10.6272 8.71309 10.8633; 목록에있는 각 <Vertex> 태그의

+0

루프''로 시작하는 모든 행을 인식하고 다음 행을 목록에 넣으십시오. 너 뭐 해봤 니? – poke

답변

0
catch = False 
mylist = [] 
with open("myfile.txt", "r") as f: 
    content = f.readlines() 
for line in content: 
    if line.startswith("<Vertex>"): 
     catch = True 
     continue 
    if catch: 
     catch = False 
     mylist.append(line) 

이렇게하면됩니다.

0

파일의 일관성에 대해 걱정하지 않는다면 매우 쉽습니다.

def readFile(path): 
    f = open(path, 'r') 
    return f.readlines() 

def parseVertexes(lines): 
    coordinates = [] 

    for index, line in enumerate(lines): 
     if index % 5 == 1: #second line in vertex 
      coordinates.append(line.split(" ")) 

아직 테스트하지는 않았지만 제대로 작동합니다. 파일이 일관성이없는 경우 사례를 처리하기 위해 더 많은 인프라를 구축해야합니다. 파일을 가정

0

과 같이이다 :

<Vertex> 0 { 
    -10.6272 8.71309 10.8633 
    <UV> { 0.724203 0.210816 } 
    <RGBA> { 0.916 0.609 0.439 1 } 
} 
<Vertex> 0 { 
    -10.6272 8.71309 10.8633 
    <UV> { 0.724203 0.210816 } 
    <RGBA> { 0.916 0.609 0.439 1 } 
} 
<Vertex> 0 { 
    -10.6272 8.71309 10.8633 
    <UV> { 0.724203 0.210816 } 
    <RGBA> { 0.916 0.609 0.439 1 } 
} 

그런 다음 당신은 두 번째 줄에서 시작, 모든 5 라인을 선택, 시작의 공간을 제거하는 문자열 슬라이스를 사용하여, 새로운 수 끝에 줄 문자.

file = open("file.txt","r") 
mylist = [] 
for l,line in enumerate(file): 
    if (l - 1) % 5 == 0: 
     mylist.append(line[2:-2]) 

file.close() 

또는, 하나 라이너 :

[line[2:-2] for l,line in enumerate(open("file.txt","r")) if (l - 1) % 5 == 0] 
3
당신은 정규 표현식으로 그것을 할 수

: 라인을 통해

>>> import re 
>>> r = re.compile("^<Vertex>\s*\d+\s*{\s*([-\d. ]+)", re.MULTILINE) 
>>> with open("filename") as fd: 
>>>  matches = r.findall(fd.read()) 
>>> matches 
['-10.6272 8.71309 10.8633', '-10.6272 8.71309 10.8633', ...] 
관련 문제