2016-12-04 3 views
2

Я запустил subprocess.run на отдельный .py-файл, который дает мне грязный список, который трудно читать. Я сделал цикл, который производит файл CSV для каждой итерации и один из итераций выглядеть так:правильно скомпилировать список из вывода подпроцесса

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 Orbitrap Velos», выводится как 3 строки.

Я хочу, чтобы результаты были на одной строке, похожие на подсказку cmd. Использование .split ('\ n') не достигает того, что я хочу, потому что он делает элемент и результат как одну строку. В идеале, я хочу заголовок, который находится в верхней строке (или в самом левом столбце) и повторных списках внизу (или справа от первого столбца).

cmd prompt output

Я хотел сделать словарь, но детали и результаты не совпадают, так как эти два списка не будут иметь одинаковое количество элементов и поэтому использование почтового индекса() функция не поможет. Пожалуйста, порекомендуйте. Благодарю.

ответ

0

Если я правильно вас понимаю, вы можете просто показать заголовок, а затем результат на следующей строке. Следующее должно сделать это с вашим примером.

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