2010-12-10 7 views
0

안녕의 평가 기능 나는 다음과 같은 코드가 있습니다파이썬이

경로 = A TEXTFILE를 가져올 수 귀하의 하드 드라이브

def K(path): 
    try: 

     getfile = open(path + '/test.txt') 
     line = getfile.readlines() 
     print line 
     getfile.close() 

    except: 
     line = getfile.readlines() 
     eval(line) 
     d = dict() 
     val= d[k] 

에 대한 몇 가지 대상을, 지금 내 문제는의 \n을 피하기 위해하는 내가 가정은 eval() 기능을 사용하여 수행 할 수 있습니다. 내가 입력으로받을 문자열을 변환 할, 사전에 내가 어떤 조언을 위해 ..

고맙습니다 작업 할 수 있습니다 수레하는

+1

텍스트 파일의 형식을 설명하면 도움이됩니다. 'eval'을 사용하면'\ n'을 피할 수 없습니다. – khachik

+0

이 코드는 무엇을하기로되어 있습니까? –

+0

내 harddrive에서 일부 file.txt 걸리고 문자열로 파이썬 껍질에 텍스트를 가져옵니다. 즉, 인스턴트 파일에 1,2 (줄 바꿈) 2,3 (줄 바꿈) 7,5가있는 경우 셸에 입력됩니다. [ '1,2 \ n', '2,3 \ n', '7,5'] 그리고 나는 그것이 함께 일할 수있는 숫자가되고 싶다 :) 도움이 되었으면 좋겠다 – user457142

답변

1

코드에 주석을 쓰지 않고 조사하고 수정할 수있는 예를 게시 할 것입니다. 이 함수는 텍스트 파일의 내용을 읽고, 가능하면 공백으로 구분 된 토큰을 수레로 변환 :

def getFloats(filepath): 
    fd = open(filepath) # open the file 
    try: 
    content = fd.read().split() # read fully 
    def flo(value): # a function that returns a float for the given str or None 
     try: return float(value) 
     except ValueError: return None # skip invalid values 
    # iterate through content and make items float or None, 
    # iterate over the result to choose floats only 
    return [x for x in [flo(y) for y in content] if x] 
    finally: 
    fd.close() 
1

코드가 매우 혼란 ... 한 줄에 하나의 플로트가 포함 된 파일을 읽는 당신은 간단하게 수행 할 수 있습니다

val = map(float, open("test.txt")) 

val는 플로트

01 인 각 요소와 데이터를 포함하는 목록이 될 것입니다
+0

'val = [open ('test.txt')]의 행에 대한 float (line)은 파일의 행을 반복 할 때 한 번에 모든 행을 읽지 않기 때문에 더 명확하고 메모리 효율이 높습니다 'readlines()'). –

+0

@benhoyt : 네 말이 맞아 ... 나는 동시에 여러 줄을 가지고 놀 필요가있을 때 종종'L = open (xxx) .readlines()'를 사용하여 끝난다. 그것은 위험 할 정도로 손가락 수준에 도달 한 것이다. 지금. – 6502

0

ast.literal_eval() 당신이 다음 값을 반복 또는 인덱스 수 튜플로 각 라인을 설정합니다.

0

다음은 float 목록의 목록을 반환하는 함수 read_numbers()입니다.

def read_numbers(filename): 
    numbers = [] 
    with open(filename) as f: 
     for line in f: 
      lst = [float(word) for word in line.split(',')] 
      numbers.append(lst) 
    return numbers 

는 파일이 포함되어있는 경우 :

다음 read_numbers('filename')
1, 2 
2, 3 
7, 5 

는 반환 :

[[1.0, 2.0], [2.0, 3.0], [7.0, 5.0]] 

당신은 오류가 내부 목록을 확장하여 (또는 단순히 오류를 무시) 처리를 수행 할 수 있습니다 이해하고 전화를 float()try ... except ValueError에 바 꾸었습니다.

관련 문제