Найти - Пользователи
Полная версия: Подскажите с кодом(Excel)
Начало » Python для новичков » Подскажите с кодом(Excel)
1
Protoss
Добрый всем день!
У меня вопрос на счет считывания excel файла. Точнее я не знаю в каком направлении двигаться.
Вот пример кусочек кода:
import matplotlib.pyplot as plt
from pylab import *
import cmath
def sf(prompt):
""" """
    error_message = "Value must be integer and greater or equal than zero"
    while True:
        val = raw_input(prompt)
        try:
            val = float(val)
        except ValueError:
            print(error_message)
            continue
        if val <= 0:
            print(error_message)
            continue
        return val
def petrogen_elements():
    """Input and calculations the main parameters for
    pertogen elements"""
    print "Please enter Petrogen elements: \r"
    SiO2 = sf("SiO2: ")
    Al2O3= sf("Al2O3: ")
    Na2O = sf("Na2O: ")
    K2O =  sf("K2O: ")
    
    petro = [SiO2,TiO2,Al2O3,]                    
    
    Sum = sum(petro)
    
    Alcal = Na2O + K2O
    TypeA lcal= Na2O / K2O
    Ka= (Na2O + K2O)/ Al2O3 
 
    print  '-'*20, "\r Alcal: %s \r TypeAlcal: %s  \
     \r Ka: %s \r" % (Alcal, TypeAlcal,Ka,)
    
petrogen_elements()
Так вот в чем задача. Считать exel файл найти вот эти значения(SiO2,Na2O…) и сделать с ними эти вычисления. Т.е. пользователь либо вбивает их сам либо может импортировать таблицу, где значения эти идут в строго определенном порядке!
Например таблица. Столбцов строго определенное количество. А строк сколько угодно. Надо считывать данные от Обр до 5 столбца и так до конца файла.
1 2 3 4 5
1 Обр1 SiO2 Al2O3 Na2O K2O
2 32 12 0.21 0.1
3 Обр2 SiO2 Al2O3 Na2O K2O
4 45 8 7.54 5
5 Обр3 SiO2 Al2O3 Na2O K2O
6. … …. …. …


Если ли идеи реализации? Я изучаю xlrd, но все таки не совсем понял как именно исполнить эту задачу.
Protoss
Таблица не получилось, но имеется ввиду как в excel. 1-ая строка 1-ый столбец Это Обр1. далее 1 строка 2 столбец SiO2 итп под ними их значения
pyuser
если
Protoss
значения эти идут в строго определенном порядке!
, то зачем повторять через строку наименования элементов? Что такое ОбрN? Оно у Вас ни где не используется. Таким образом Ваши входные данные можно представить в следующем виде:
SiO2 Al2O3 Na2O K2O
32 12 0.21 0.1
45 8 7.54 5
Пример обработки:
import csv
def parse_file(fname):
    with open(fname, "rt", encoding="utf-8") as f:
        for _set in csv.DictReader(f, delimiter=" "):
            _set = {k: float(v) for k, v in _set.items()}
            petrogen_elements(_set)
или так:
from collections import namedtuple
SET = namedtuple("SET", "SiO2, Al2O3, Na2O, K2O")
def parse_file(fname):
    with open(fname, "rt", encoding="utf-8") as f:
        next(f) # пропускаем строку заголовков, чтобы не менять формат файла
        for line in f:
            _set = SET(*map(float, line.split()))
            petrogen_elements(_set)
Ваша функция petrogen_elements немного изменится
def petrogen_elements(_set):
    Sum = sum((_set["SiO2"], _set["TiO2"], _set["Al2O3"]))
    
    Alcal = _set["Na2O"] + _set["K2O"]
    TypeAlcal= _set["Na2O"] / _set["K2O"]
    Ka= (_set["Na2O"] + _set["K2O"]) / _set["Al2O3"]
 
    print("{}\r Alcal: {}\r TypeAlcal: {}\r Ka: {}".format('-'*20, Alcal, TypeAlcal, Ka))
Ну а если непременно лист Excel нужно обработать, то для указанного выше формата:
import xlrd3 as xlrd
from collections import namedtuple
SET = namedtuple("SET", "SiO2, Al2O3, Na2O, K2O")
def parse_file(fname):
    ws = xlrd.open_workbook(fname).sheets()[0]
    for i in range(1, ws.nrows): # пропускаем строку заголовков
        _set = SET(*ws.row_values(i, end_colx=ws.ncols))
        petrogen_elements(_set)
Protoss
Обр это просто стринговое название объекта.
Спасибо большое за помощь.
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