Разделение файла данных в Python, раунд 2
Поэтому я недавно нашел решение этого вопроса, в котором я хотел взять два столбца файла данных и поместить их в два массива. Теперь у меня есть этот код, который прекрасно справляется со своей задачей.
Xvals=[]; Yvals=[]
i = open('BGBiasRE_IM3_wCSrescaled.txt','r')
lines = [line.split() for line in i if line[:4] not in ('time', 'Step')]
Xvals, Yvals = zip(*lines)
V = [0, 0.004, 0, 0.0004]
pylab.plot(Xvals, Yvals, marker='o')
pylab.axis(V)
pylab.xlabel('Time (ms)')
pylab.ylabel('Current (A)')
pylab.title('Title')
pylab.show()
Но теперь я понимаю, что облажался вопрос. У меня есть файл данных, изложенный ниже,
time I(R_stkb)
Step Information: Temp=0 (Run: 1/11)
0.000000000000000e+000 0.000000e+000
9.999999960041972e-012 8.924141e-012
1.999999992008394e-011 9.623148e-012
Step Information: Temp=10 (Run: 2/11)
0.000000000000000e+000 0.000000e+000
9.999999960041972e-012 4.924141e-012
1.999999992008394e-011 8.623148e-012
(Примечание: между каждой строкой данных нет пустых строк, а между двумя значениями данных имеется вкладка)
Приведенный выше код добавляет всю информацию о шагах в один массив, поэтому я получаю два больших длинных массива, когда мне нужны два разных массива для разных шагов, чтобы позже я мог построить их соответствующие массивы отдельно. Я также должен получить имя шага, в этом случае Temp=10 и присоединить его / назвать массив, чтобы отразить каждый кусок информации о шагах. Например. Я хотел бы в конечном итоге с такими массивами
Temp0_Xvals = [ 0.000000000000000e+000, 9.999999960041972e-012, 1.999999992008394e-011]
Temp0_Yvals = [ 0.000000e+000, 8.924141e-012, 9.623148e-012]
Temp10_Xvals = [...]
Temp10_Yvals = [...] etc etc
Очевидно, что это значительно усложняет проблему, и я понятия не имею, с чего начать.
2 ответа
Я бы сделал что-то в этом роде:
i = open('BGBiasRE_IM3_wCSrescaled.txt', 'r')
Xnames, Ynames = [], []
count = 0
for line in i:
if count > 0:
line_tmp = line.split()
if line_tmp[0] == 'Step':
step = (line_tmp[2].split('='))[1]
varnameX = 'Temp' + str(step) +'_Xvals'
varnameY = 'Temp' + str(step) +'_Yvals'
globals()[varnameX] = []
globals()[varnameY] = []
Xnames.append(varnameX)
Ynames.append(varnameY)
else:
globals()[varnameX].append(float(line_tmp[0]))
globals()[varnameY].append(float(line_tmp[1]))
count += 1
i.close()
for name in Xnames:
print name + ' = ' + str(eval(name))
for name in Ynames:
print name + ' = ' + str(eval(name))
Это, безусловно, не самое эффективное решение, но оно работает для вашей конкретной проблемы