2016-12-05 5 views
0

.dat 파일에서 일부 시뮬레이션 결과를 읽고 분석하려고합니다.문자열 배열을 부동 배열로 변환

N o d a l D i s p l a c e m e n t s  Time  0.10000E+01 
              Prop. Ld. 1.00000E+00 

Node  1 Coord  2 Coord  3 Coord  1 Displ  2 Displ  3 Displ 
    1 0.0000E+00 5.0000E-01 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 

    2 0.0000E+00 2.5005E-01 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 

    3 0.0000E+00 1.0000E-04 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 
    4 1.0000E+00 5.0000E-01 0.0000E+00 -1.9511E-04 4.0845E-04 -2.1522E-05 

    5 1.0000E+00 2.5005E-01 0.0000E+00 1.1185E-08 4.0053E-04 2.6545E-09 

    6 1.0000E+00 1.0000E-04 0.0000E+00 1.9511E-04 4.0847E-04 2.1526E-05 

    7 2.0000E+00 5.0000E-01 0.0000E+00 -3.5177E-04 1.5287E-03 -1.2678E-05 

... 그래서 하나 파일 구조 다음있다.

숫자 데이터를 실수로 변환하여 문자열을 삭제할 수 있습니까? 나는 다음과 같은 코드로 시도 :

class DataLoader: 
    def __init__(self, number_files): 
     self.number_files = number_files 

    def loader(self): 
     array = [] 

     for i in range(1, self.number_files + 1): 
      try: 
       if i < 10: 
        data = open("ndis_00%s.dat" % i, "r") 
       elif i >= 10 and i <= 100: 
        data = open("ndis_0%s.dat" % i, "r") 
      except IOError: 
       print("I/O Error") 

      for line in data: 
       if line != "\n": 
        array.append(line.split()) 
        try: 
         float(line) 
        except (ValueError, TypeError): 
         line[:] = [] 
        print(line) 

을 내가 떠 변환 선을 유지하려는 코드와 완전히 삭제할 수 있습니다 변환하지 않습니다 문자열에서.

답변

0

파일이 실제로 위와 같이 구성되어 있으면 원하는 데이터가 포함 된 줄이 비어 있지 않고 알파벳 문자로 시작하지 않습니다. 다음과 같이 그것을 악용 할 수 있습니다.

은 위의 기능은 이러한 파일을 소요
def extractData(f): 
    data = [] 
    for line in f: 
     line = line.strip() 
     if len(line) == 0 or line[0].isalpha(): continue 
     items = line.split() 
     data.append([float(item) for item in items[1:]]) 
    return data 

및 관심있는 부동 소수점 데이터를 포함하는 2 차원 파이썬 배열 (목록 목록)를 반환

하는 테스트하려면 (test.dat는 샘플 데이터가 포함 된 경우) :

with open('test.dat') as testf: 
    nums = extractData(testf) 
    for row in nums: print(row) 

출력 :

[0.0, 0.5, 0.0, 0.0, 0.0, 0.0] 
[0.0, 0.25005, 0.0, 0.0, 0.0, 0.0] 
[0.0, 0.0001, 0.0, 0.0, 0.0, 0.0] 
[1.0, 0.5, 0.0, -0.00019511, 0.00040845, -2.1522e-05] 
[1.0, 0.25005, 0.0, 1.1185e-08, 0.00040053, 2.6545e-09] 
[1.0, 0.0001, 0.0, 0.00019511, 0.00040847, 2.1526e-05] 
[2.0, 0.5, 0.0, -0.00035177, 0.0015287, -1.2678e-05] 
,536,913,632 10

이것이 작동하지 않으면 파일의 구조를 제대로 정의하지 않은 것입니다.

+0

감사합니다. 그게 전부 야. – ingenium

관련 문제