Форум сайта python.su
0
Добрый день!
Пишу код для обработки экспериментальных измерений. Соответственно, должна быть возможность считывания экселевской таблицы и вывода результатов в таблицу. Мне казалось, что я смогла разобраться с модулями xlrd и xlwt для этой цели, но, видимо, я ошиблась.
Подскажите, пожалуйста, в чем ошибка в функции, представленной ниже? Она должна выводить данные, полученные расчетным путем в файл results.xls, но она его перестала даже создавать.
Проблема в неправильно построенном цикле?
Или в возможностях xlwt (когда было решено его использовать, я еще не знала, что он вроде бы не поддерживает запись в уже созданный файл)?
Или в чем-то еще?
def izmereniya(): sec = 3.15e7 iod = ('120I', '120mI', '121I', '122I', '123I', '124I', '125I', '126I', '128I', '129I', '130I', '131I', '132I', '132mI', '133I', '134I', '135I') IRG = ('39Ar', '41Ar', '74Kr', '76Kr', '77Kr', '79Kr', '81Kr', '81mKr', '83mKr', '85Kr', '85mKr', '87Kr', '88Kr', '120Xe', '122Xe', '121Xe', '123Xe', '125Xe', '127Xe', '129mXe', '131mXe', '133Xe', '133mXe', '135Xe', '135mXe', '138Xe') H_obl_izm = 0 H_pov_izm = 0 H_ing_izm = 0 import xlrd import xlwt calc = xlwt.Workbook() izmer = calc.add_sheet('Izmer.radionuklidy', cell_overwrite_ok=True) tritiy = calc.add_sheet('tritiy i uglerod', cell_overwrite_ok=True) book = xlrd.open_workbook("d:/01fxcv/pythonchik/Koefficienty.xls") NPP = book.sheet_by_index(0) RTN = book.sheet_by_index(1) j = 0 izmer.write(j, 0,'Radionuklid') izmer.write(j, 1,'Q') izmer.write(j, 2,'Doza obl') izmer.write(j, 3,'Doza ing') izmer.write(j, 4,'Doza pov') izmer.write(j, 5,'Doza meal') tritiy.write(j, 0,'Radionuklid') tritiy.write(j, 1,'Q') tritiy.write(j, 2,'Doza') m = NPP.nrows j = j + 1 while j <= m: r_name = NPP.row_values(j)[0] r_name_C = RTN.row_values(j)[0] Q = float(NPP.row_values(j)[1]) if r_name == '3H': doz_koef_3H = 2.6e-8 abs_vlazh = 6e-3 H_3H = (Q * doz_koef_3H) % (sec * abs_vlazh) tritiy.write(j, 0, r_name) tritiy.write(j, 1, Q) tritiy.write(j, 2, H_3H) elif r_name == '14C': doz_koef_14C = 5.6e-5 param_14C = 1.8e-1 H_14C = (Q * doz_koef_14C) % (sec * param_14C) tritiy.write(j, 0, r_name) tritiy.write(j, 1, Q) tritiy.write(j, 2, H_14C) elif r_name == r_name_C: izmer.write(j, 0, r_name) izmer.write(j, 1, Q) R_obl = RTN.row_values(j)[1] H_obl = sec * R_obl * Q H_obl_izm = H_obl_izm + H_obl izmer.write(j, 2, H_obl) koef_doz_preobr_ing = RTN.row_values(j)[2] intens_dyh = RTN.row_values(j)[3] H_ing= Q * sec * koef_doz_preobr_ing * intens_dyh H_ing_izm = H_ing_izm+H_ing izmer.write(j, 3, H_ing) if r_name in iod: skor_suh_osazhd = 1e-4 elif r_name in IRG: skor_suh_osazhd = 0 else: skor_suh_osazhd = 8e-3 R_pov = RTN.row_values(j)[4] post_raspada = RTN.row_values(j)[5] H_pov= Q * sec * R_pov * skor_suh_osazhd % (post_raspada) H_pov_izm=H_pov_izm+H_pov izmer.write(j, 4, H_pov) else: j = j + 1 continue calc.save('d:/01fxcv/pythonchik/results.xls') izmereniya()
Офлайн
253
angeline
Пишу код для обработки экспериментальных измерений.
angelineОшибка в том что для обработки данных exel противопоказан. Зачем он вообще вам нужен? Перегоните данные в csv и работайте с ними.
Подскажите, пожалуйста, в чем ошибка в функции, представленной ниже?
Офлайн
12
doza_and
+1
зачем эксель, когда есть пандас
ну а при желании всегда есть to_excel
Офлайн
0
doza_and
izekia
Благодарю за советы. Что на Ваш взгляд будет удобнее: использование встроенного модуля csv или скачать дополнительно пакет pandas или нечто еще?
Офлайн
12
angeline
с DataFrame можно производить все необходимые манипуляции, а потом сохранять в нужном Вам формате
Все зависит от задачи
Офлайн
253
angelineСудя по тому что вы делаете вам просто надо посмотреть что такое numpy и scipy и переформулировать задачу в матричном представлении. Тогда весь ваш код будет размером в пять строчек.
Что на Ваш взгляд будет удобнее: использование встроенного модуля csv или скачать дополнительно пакет pandas
Офлайн