Найти - Пользователи
Полная версия: Запись в файл .xls
Начало » Python для новичков » Запись в файл .xls
1
angeline
Добрый день!
Пишу код для обработки экспериментальных измерений. Соответственно, должна быть возможность считывания экселевской таблицы и вывода результатов в таблицу. Мне казалось, что я смогла разобраться с модулями 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()
doza_and
angeline
Пишу код для обработки экспериментальных измерений.
angeline
Подскажите, пожалуйста, в чем ошибка в функции, представленной ниже?
Ошибка в том что для обработки данных exel противопоказан. Зачем он вообще вам нужен? Перегоните данные в csv и работайте с ними.
izekia
doza_and
+1
зачем эксель, когда есть пандас
ну а при желании всегда есть to_excel
angeline
doza_and
izekia
Благодарю за советы. Что на Ваш взгляд будет удобнее: использование встроенного модуля csv или скачать дополнительно пакет pandas или нечто еще?
izekia
angeline
с DataFrame можно производить все необходимые манипуляции, а потом сохранять в нужном Вам формате
Все зависит от задачи
doza_and
angeline
Что на Ваш взгляд будет удобнее: использование встроенного модуля csv или скачать дополнительно пакет pandas
Судя по тому что вы делаете вам просто надо посмотреть что такое numpy и scipy и переформулировать задачу в матричном представлении. Тогда весь ваш код будет размером в пять строчек.
csv считаю не очень удобным (csv вообще плохо специфицирован) https://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html и https://docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html проще использовать. если данные сложнее чем обычные таблицы то обычно храню в json yaml или h5 формате. Последний предпочтителен для больших объемов. Первые два хороши потому что редактируются и нормально просматриваются любым текстовым редактором. Если не предполагается длительное хранение то наиболее удобен pickle, можете сохранить и восстановить практически любые объекты питона.
pandas нужен скорее для обработки данных а не для их сохранения/восстановления. И предназначен он именно для таблиц (те матриц с именоваными строками и столбцами). Можно считать что это расширение numpy в этом направлении.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB