2015-01-30 7 views
0

저는 상당히 새로운 프로그래머입니다.파이썬에서 문자열/배열에 스트립 된 줄 추가하기

현재 .txt 파일에서 데이터를 찾고 문자열이나 배열에 추가하려고합니다. 그러면 결국 .csv 파일에 추가됩니다.

내가보고 있어요 데이터는이 양식에 현재 존재하는 각 .txt 파일 내에서 임의의 간격으로 여러 번 :

'라인 플럭스 : W 3.0008e-19 +/- 2.6357e-21 [/ cm^2] 따라서

이 나는 ​​오류를 생성하지 않는 코드로 올라와있다하지만 중 아무것도 인쇄되지 않습니다 접근 주위에 몇 가지 방법을 읽은 후 :

cwd = os.getcwd() 

def open_txt(): 
    flux = {} 
    for file in cwd: 
     if file.endswith('.txt'): 
      f = open(file,'r') 
      lines = f.readlines() 
      for line in lines: 
       if line.startswith(' Line Flux:'): 
        line.strip(' Line Flux:      ' + '[W/cm^2]') 
        flux.append(line) 
        print flux 

open_txt() 

이 있습니까 내가 잘못하고있는 것이 명백한 무엇인가?

읽어 주셔서 감사합니다. 도움이되는 답변은 크게 감사하겠습니다.

+0

문제의 유일한 원인이지만 'strip'이 문자열을 수정하지 않는다면 원하는 변경 사항으로 새로운 문자열을 반환합니다. 당신이 그것을 사용하고 싶다면 당신은 결과를 무언가에 할당해야한다. – Kevin

+2

문제는 아니지만 파일을 닫지 않았습니다. 메소드의 마지막에'f.close()'를 넣거나, 더 좋게는'open (file) as f :'를 사용하여 자동으로 닫는다. –

+0

플럭스도 목록이어야 함 [] not a dict {} –

답변

0

getcwd은 문자열을 반환하므로 내 버그가있는 곳이라고 생각합니다. 문자열의 각 문자를 반복합니다. 아마도 listdir이 필요합니다.

link도 확인하시기 바랍니다.


즉 당신이 "인쇄 마커"를 삽입하려고하고 또한 모든

cwd = os.getcwd() 

def open_txt(): 

    # This has to be a list, not a dict. 
    flux = [] 
    for file in cwd:  

     if file.endswith('.txt'): 
      # Check loop is entered, with this print marker 
      print 'it opened file: %s'% file 

      f = open(file,'r') 
      lines = f.readlines() 
      for line in lines: 
       if line.startswith(' Line Flux:'): 
        line.strip(' Line Flux:      ' + '[W/cm^2]') 
        flux.append(line) 
        print flux 

open_txt() 

에서 파일을 열면 볼 수있는 경우가 아닌 경우, strip는 모든 문자를 제거하고 당신 제공됩니다. / : e 포함. strip('ab'+'cz') 대신 당신이 regular expressions을 사용할 수 있습니다 strip('acbz')

하는 것과 같습니다 패턴에

import re 

my_str = ' Line Flux: 3.0008e-19 +/- 2.6357e-21 [W/cm^2]' 

pattern = re.compile(r'Line Flux: (.*?)\[W/cm\^2\]') 
result = re.findall(pattern, my_str) 

print result 

괄호가 반환 될 경기의 어느 부분을 나타냅니다.

1

이 작동합니다 :

cwd = os.getcwd() 

def open_txt(): 
    flux = [] 
    for file in os.listdir(cwd): 
     if file.endswith('.txt'): 
      with open(file,'r') as f: 
       lines = f.readlines() 
       for line in lines: 
        if line.startswith(' Line Flux:'): 
         output_line = line[11:-8] 
         flux.append(output_line) 
       print flux 

open_txt() 

나는 corretly 폐쇄되는 파일을 보장하기 위해 공개와 함께 사용.

첫 번째와 마지막 문자를 스틱 핑하는 파이썬 슬라이스 표기법.

dict 대신 목록으로 변경되었습니다.

또한 완성 된 배열 만 인쇄 할 수 있도록 for 루프에서 인쇄 statemnt를 이동했습니다.

+0

"Line Flux :"및 "[W/cm^2]"문자열을 제거하려고 시도한 것으로 추정됩니다. 그렇지 않은 경우 다른 스트립 방법이 필요합니다. –