2016-04-10 7 views
0

から行と列の選択異なるファイルに保存します。各データセットのPythonの - 私はこのタイプのFILE.DATを持っていますが、より多くのデータをデータ

Apr 1 18:15 [n1_Cam_A_120213_O.fits]: 
4101.77 1. -3.5612 3.561 -0.278635 4.707 6.448  #data1 
0.03223 0. 0.05278 0.05278 0.00237 0.4393 0.4125 #error1 
4088.9  1. -0.404974 0.405 -0.06538 5.819 0.  #data2 
    0.  0. 0.01559 0.01559 0.00277 0.1717 0.  #error2 
4116.4  1. -0.225521 0.2255 -0.041111 5.153 0.  #data3 
    0.  0. 0.01947 0.01947 0.00368 0.4748 0.  #error3 
4120.8  1. -0.382279 0.3823 -0.062194 5.774 0.  #data4 
    0.  0. 0.01873 0.01873 0.00311 0.3565 0.  #error4 

Apr 1 18:15 [n1_Cam_B_120213_O.fits]: 
4101.767 0.9999 -4.57791 4.578 -0.388646 0.03091 7.499 #data1 
0.0293  0.  0.03447 0.03447 0.00243 0.00873 0.07529 #error1 
4088.9  1.  -0.211493 0.2115 -0.080003 2.483 0. 
    0.  0.  0.01091 0.01091 0.00327 0.1275 0. 
4116.4  1.  -0.237161 0.2372 -0.040493 5.502 0. 
    0.  0.  0.02052 0.02052 0.00231 0.5069 0. 
4120.8  1.  -0.320798 0.3208 -0.108827 2.769 0. 
    0.  0.  0.0167 0.0167 0.00404 0.1165 0. 

最初の行でも、name.fitsが含まれています行には値が含まれ、奇数行(最初は除く)には前の行の値のエラーが含まれます。そして、空白の行が来て、再び始まります。だから、次のファイルは、その後、私のデータの最初の新しいファイルは次のようになり

name1.fits data2[1] err2[1] data2[2] err2[2] data2[3] err2[3]... 
name2.fits data2[1] err2[1] data2[2] err2[2] data2[3] err2[3]... 

だろう

name1.fits data1[1] err1[1] data1[2] err1[2] data1[3] err1[3]... 
name2.fits data1[1] err1[1] data1[2] err1[2] data1[3] err1[3]... 

:私は必要なもの

は、このように別のファイルに情報を分離することです:ここでは

n1_Cam_A_120213_O.fits 4101.77 0.03223 1.  0. -3.5612 0.05278 3.561 0.05278 -0.278635 0.00237 4.707 0.4393 6.448 0.4125 
n1_Cam_B_120213_O.fits 4101.767 0.0293 0.9999 0. -4.57791 0.03447 4.578 0.03447 -0.388646 0.00243 0.03091 0.00873 7.499 0.07529 

は、私がこれまで持っているものです。

with open('file.dat','r') as data, open('names.txt', 'a') as nam, open('values.txt', 'a') as val, open('errors.txt', 'a') as err: 
    for lines in data.readlines(): 
     cols = lines.split()  
     if "fits" in lines: 
      header = lines.split() 
      nam.write(header[3]) 
     elif float(cols[0]) > 1: 
      #print cols[0] 
      x=str(cols)   
      val.write(x) 
     elif float(cols[0]) < 1: 
      #print cols[0] 
      y=str(cols) 
      err.write(y)        

私はちょうどpythonから始まっています。別の名前の値と異なるファイルのエラーを考えて、必要な行と列を選択しました。しかし、私は何百もの行とファイルを扱うので、私はより自動化されたアプローチを望んでいます。私が欲しいのは、最初の3行を読んでfile1を書いてから1,4,5行を書いてfile2を書いてから1,6,7行を書いてfile3を書いてから1,8,9行を書いてfile4を書いてから空白を飛ばす行11,12,13を読み取り、file1を書き込み、次に11,14,15行を書き込み、file2を書き込むなどの処理を行います。

答えて

0

次のコードを試してみてください。

結果命名規則は、...

first = False 
for i in open('file.dat'): 
    i = i.strip() 
    if not i: 
     continue 

    if 'fits' in i: 
     name = i.split()[3][1:-2] 
     data = None 
     first = not first 
     if first: 
      out = [] 

     cur = -1 
    else: 
     if not data: 
      data = i.split() 
      if first: 
       out.append(open('%d' % len(out), 'w')) 
      else: 
       cur += 1 

      out[cur].write(name) 
     else: 
      for d, e in zip(data, i.split()): 
       out[cur].write(' %s %s' % (d, e)) 

      out[cur].write('\n') 
      data = None 
+0

お返事ありがとうございます。多分私は何かが欠けているかもしれませんが、生成するファイルは空です。私はあなたのコードに迷っています。もっと深く見ていきます。 – JVR

+0

#data1、#error1のようなコメントを削除しました – Like

+0

まだ空の出力が出ています。あなたはコードとは何か違うものを得ていますか? – JVR

0

は、私は最終的に作品にそれを得るために0、1、2に管理されていますが、おそらくあなたはいくつかのヒントは、より良い、それを得るために私を与えることができます。ここにあります:

with open('file.log','r') as data, open('out1.txt', 'w') as out1, open('out2.txt', 'w') as out2: 


    def readError(error): # original data had errors inside parenthesis 
     newError = [] 
     for e in error: 
      e = e.replace('(','').replace(')','')    
      e = e.split() 
      newError.extend(e) 
     return newError 

    for lines in open('file.log','r'):  
     lines = data.readline() 
     cols = lines.strip().split()  
     if "fits" in lines: 
      name = cols[3].replace('[','').replace(']','').replace(':','') + ' ' + '0' + ' ' + '1' 
      # 0 and 1 were some indexes I needed to add to each line 

      for i in range(0,2): # I needed to write 2 files 
       dato = data.readline().strip().split() 
       error_dato = readError(data.readline().strip().split()) 
       newline = '' 
       if i == 0: 
        newline = name 
        for j in range(0, 7): # data had 7 columns 
         newline = newline + ' ' + dato[j] + ' ' + error_dato[j] 
        print newline 
        out1.write(newline + '\n') 
       elif i == 1: 
        newline = name 
        for j in range(0, 7): 
         newline = newline + ' ' + dato[j] + ' ' + error_dato[j] 
        print newline 
        out2.write(newline + '\n') 

     linea = data.readline().strip() 
     # I don't know why the code doesn't work without this line 
関連する問題