2015-06-24 6 views
1

Я прохожу через каталог .exp файлов, вытягивая информацию, которую я хочу от каждого из них, а затем компилирую в файл .csv. это безвкусный, но вот это:Python: parse .exp to .csv

outMCfile = open(os.path.join(workingDir,'output',date+'NeptuneCdSummary.csv'),'w+') 
for fn in fileList: 
    infile = os.path.join(workingDir,fn) 

    tmpHeader = open(infile,'r').readlines() 
    for line in tmpHeader: 
     line = line.strip() 
     if line.startswith('Date') == True: 
      doa = line.split(' ') 
      doa = doa[1] 
      outMCfile.write(doa) 
      outMCfile.write("\n") 
     elif line.startswith('Run number') == True: 
      run = line.split(':') 
      run = run[1].strip() 
      outMCfile.write(run) 
      outMCfile.write("\n") 
     elif line.startswith('Comment') == True: 
      comment = line.split(':') 
      comment = comment[1].strip() 
      outMCfile.write(comment) 
      outMCfile.write("\n") 
     elif line.startswith('SampleType') == True: 
      samType = line.split(':') 
      samType = samType[1].strip() 
      outMCfile.write(samType) 
      outMCfile.write("\n") 
     elif line.startswith('Cycle') == True: 
      labels = line 
      outMCfile.write(labels) 
      outMCfile.write("\n") 
     elif line.startswith('***') == True: 
      summary = line 
      outMCfile.write(summary) 
      outMCfile.write("\n") 

outMCfile.close() 

последние два условия в for цикла (строки, которые начинаются с «Cycle» и «***») являются 22-32 столбцов в ширину (некоторые индексы, некоторые из них поплавки). Как я могу разграничить результат? Я просто получаю длинную строку чисел в моем выходном CSV для каждой из этих строк в одной и той же ячейке. И если я использую line.split(), я получаю TypeError независимо от того, какой разделитель я использую в скобках.

Источник линия (это все в одной строке) в .exp выглядит следующим образом: «*** Среднее 1.8101587019969535e-003 1.7032095329860594e-003 1.1496630243258965e-003 1.1713999855908471e-003 4.7688994577955489e-003 4.5573296301687650e -003 3.9930890896827012e-002 2.0829073529889563e-002 9.3939542591824787e-001 9.5234032647735734e-001 1.7299477345544945e + 000 + 000 2.5226638938456563e 3.8076954346734854e-001 1.8291027001438267e + 000 + 000 2.6616393017410958e 4.0608176179586236e-001 1.5082949448806580e + 000 2.1780140681716909e-001 1.4703089782231224e-001 "

Но выход в .csv больше не имеет разделения пространства; это все в первой ячейке, тогда как мне нужны «***», «Mean», «##### ...», «#### ...» для каждой из них есть их собственная ячейка.

+1

в '== true' излишни. Возможно, вы можете опубликовать одну из этих строк, которые вызывают проблемы? – wardk

+0

другой nitpick: в 'outMCfile = open (...)', ''режим w'' достаточен, так как вы его никогда не читали. –

+0

Спасибо за отзыв re. == Истинный ... Я все еще нахожусь на неуклюжем уровне в Python, всегда ищем более упорядочивающие советы. Это то, что вызывает проблему, в частности: 'elif line.startswith ('Cycle') == True: labels = line outMCfile.write (метки) outMCfile.write (" \ n ") elif line.startswith ('***') == True: summary = line outMCfile.write (summary) outMCfile.write ("\ n") ' – ksmith

ответ

0

Ну, теперь очевидно, что во всех предыдущих elifs вы пишете одно значение из списка, а в последних двух вы пытаетесь записать весь список в файл. Вы можете записывать только строки в файл. Преобразовать его в строку снова:

outMCfile.write(','.join(line.split())) 

или проще, возможно:

outMCfile.write(line.replace(' ', ',')) 

при условии, запятая ваш CSV разделитель

+0

ahhh, ничего себе, теперь это кажется очевидным ... Я больше никогда этого не сделаю! Огромное спасибо всем. Теперь он работает как шарм. – ksmith