2016-12-04 9 views
2

subprocess.runを別の.pyファイルで実行しましたが、読みづらい難しいリストになりました。私は反復ごとにCSVファイルを生成し、繰り返しの1がどのように見えるループのために作られています:私はより管理リストにそれを得るために、分割()メソッドを使用してみましたサブプロセスの出力から正しくリストを分割しました

Version 3.1.5.0\r\nGetFileName C:\\users\\trinh\\downloads\\higgi022_test.raw\r\nGetCreatorID thermo\r\nGetVersionNumber 64\r\nGetCreationDate time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=11, tm_min=51, tm_sec=11, tm_wday=3, tm_yday=1, tm_isdst=0)\r\nIsNewFile False\r\nIsThereMSData True\r\nHasExpMethod True\r\nInAcquisition False\r\nGetNumberOfControllers 1\r\nGetAcquisitionDate \r\nGetUniqueCompoundNames ('',)\r\nGetInstrumentDescription \r\nGetInstrumentID 0\r\nGetInstSerialNumber SN03464B\r\nGetInstName **LTQ Orbitrap Velos**\r\nGetInstModel LTQ Orbitrap Velos\r\nGetInstSoftwareVersion 2.6.0 SP3\r\nGetInstHardwareVersion \r\nGetNumInstMethods 4\r\nGetInstMethodNames ('LTQ', 'EksigentNanoLcCom_DLL', 'NanoLC-AS1 Autosampler', 'EksigentNanoLc_Channel2')\r\nGetVialNumber 0\r\nGetInjectionVolume 0.0\r\nGetInjectionAmountUnits \r\nGetSampleVolume 0.0\r\n############################################## END SECTION###################################\r\n 

、しかしそれは白い紹介します「LTQオービトラップ・ベロス」の結果と同じように、結果の一部のスペースは3行として出力されます。

結果はcmdプロンプトと同様に1行に表示します。 .split( '\ n')を使用すると、項目と結果が1つの行として作成されるので、どちらかを実行することができません。理想的には、一番上の行(または一番左の列)とその下の反復リスト(または最初の列の右)にあるヘッダーが必要です。

cmd prompt output

私は辞書を作りたかったのですが、2つのリストは同じ数の要素を持っていないので、ジップ()関数の使用は役に立たないので、項目と結果が一致しません。お知らせ下さい。ありがとう。

答えて

0

私が正しく理解していれば、ヘッダーを表示してから次の行に結果を表示するだけでOKです。あなたの例では、次のようにしなければなりません。

def cleanup(rslts): 
    # looking at the following line, working from inside outward: 
    # first split rslts on new lines 
    # then loop over it (`for r in rslts.split...`) 
    # but only accept lines which are not empty (the `if r` clause) 
    # now, we just loop over each line from that generator 
    # expression - the `for aline in (...)` part 
    for aline in (r for r in rslts.split('\r\n') if r): 
     # treat the `END SECTION` differently - just print it 
     if aline.startswith('###'): 
      print(aline) 
      continue # goes back to the `for line in (...)` 

     # `aline.split(' ', 1) splits on spaces, but a maximum of 1 time 
     # now assign `header` the first thing on the left of the `=` 
     # and `footer` the next item 
     header, remainder = aline.split(' ', 1) 
     print(header) 
     print(remainder) 

if __name__ == '__main__': 
    # messy results below: 
    rslts = """Version 3.1.5.0\r\nGetFileName C:\\users\\trinh\\downloads\\higgi022_test.raw\r\nGetCreatorID thermo\r\nGetVersionNumber 64\r\nGetCreationDate time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=11, tm_min=51, tm_sec=11, tm_wday=3, tm_yday=1, tm_isdst=0)\r\nIsNewFile False\r\nIsThereMSData True\r\nHasExpMethod True\r\nInAcquisition False\r\nGetNumberOfControllers 1\r\nGetAcquisitionDate \r\nGetUniqueCompoundNames ('',)\r\nGetInstrumentDescription \r\nGetInstrumentID 0\r\nGetInstSerialNumber SN03464B\r\nGetInstName **LTQ Orbitrap Velos**\r\nGetInstModel LTQ Orbitrap Velos\r\nGetInstSoftwareVersion 2.6.0 SP3\r\nGetInstHardwareVersion \r\nGetNumInstMethods 4\r\nGetInstMethodNames ('LTQ', 'EksigentNanoLcCom_DLL', 'NanoLC-AS1 Autosampler', 'EksigentNanoLc_Channel2')\r\nGetVialNumber 0\r\nGetInjectionVolume 0.0\r\nGetInjectionAmountUnits \r\nGetSampleVolume 0.0\r\n############################################## END SECTION###################################\r\n""" 
    cleanup(rslts) # pass messy results into a function to pretty up output 
+0

こんにちはジェラート、お返事ありがとうございます。私はPythonにはかなり新しく、あなたのコードに従うのが難しいです。あなたは何をやったのだろうか?ありがとう。 –

+0

@SpencerTrinh:私はいくつかのコメントを追加しました。あなたが何かをより明確にしたいのであれば教えてください。 – Gerrat

関連する問題