С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 09.07.2019
Сообщений: 28

Работа с таблицами Exel (в мини проекте)

04.08.2019, 23:45. Показов 2256. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import xlrd
import xlwt
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter, column_index_from_string
'''
Считывание таблицы
'''
file_obj = input('Введите путь к файлу: ') # /Users/markgurianov/Downloads/TMRCA.xlsx
workbook = load_workbook(filename=file_obj)
sheet = workbook.worksheets[0]
'''
Проверка правильности считывания
'''
row = int(input('Введите количество строк в таблице: '))
column = int(input('Введите количество столбцов в таблице: '))
if row == sheet.max_row and column == sheet.max_column:
    print('Чтение файла завершилось верно')
else:
    print('Ошибка чтения файла!!!')
'''
Получение дополнительных данных
'''
base_index = int(input('Введите индекс гаплотипа: '))
age = float(input('Введите средний возраст покаления: '))
 
'''
Подсчитаем квадрат разности всех локусов в гаплоидных наборах относительно базового
'''
row = 1
column = 2
for row1 in range(sheet.max_row):
    diff_square = 0
    if row1 != base_index:
        for column1 in range(sheet.max_column):
            a = base_index
            b = sheet.cell(row=row1, column=column1).value
            diff_square += (a - b) ** 2
    else:
        continue
    print(str(diff_square))
 
workbook.save(file_obj)
Миниатюры
Работа с таблицами Exel (в мини проекте)  
Вложения
Тип файла: xlsx TMRCA.xlsx (16.2 Кб, 1 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.08.2019, 23:45
Ответы с готовыми решениями:

Работа с таблицами Exel (в мини проекте) v2.0
Здравствуйте, попробовал написать отдельно программу для сортировки данных по столбцу и она даже запустилась, выдав верный результат. Но,...

Работа с таблицами Exel (в мини проекте) v2.1
Почему-то после строки "Проверьте данные:" не выводятся данные, а так же какая-то ошибка свойственная скорей строкам типа: a = 'не знаю как...

Работа с таблицами Exel
Как исправить ошибку? Код: import xlrd, xlwt from openpyxl import load_workbook from openpyxl.utils import get_column_letter,...

12
 Аватар для Vigi
641 / 481 / 179
Регистрация: 28.05.2012
Сообщений: 1,419
05.08.2019, 06:41
В циклах range нужно не от 0 делать
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
05.08.2019, 08:00
MarkStav, и снова повторюсь -как ты перевел и понял это исключение?
Совет - срочно надо почитать и освоить что такое дебаггер, начать его использовать прямо сейчас, в пичарме он очень удобен.
0
0 / 0 / 0
Регистрация: 09.07.2019
Сообщений: 28
05.08.2019, 11:49  [ТС]
Welemir1, эту проблему решил. Спасибо!
Подскажите пожалуйста, а есть ли способ проверить ячейку на наличие значения в ней?
Python
1
2
3
4
5
if sheet.cell(row=row1, column=column1).value == None:
    continue
else:
    calculation = ((a - b) ** 2) / 2
    diff_square += calculation
Добавлено через 15 минут
Всё, нашел способ)
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
05.08.2019, 12:01
MarkStav, совет - прежде чем писать на форум:
1) думаем
2) используем дебаггер (если ошибка)
3) читаем документацию
4) ищем в гугле
5) ищем на киберфоруме
6) задаем вопрос с чистым сердцем
обычно дальше 4 пункта не должно заходить!
0
0 / 0 / 0
Регистрация: 09.07.2019
Сообщений: 28
05.08.2019, 13:25  [ТС]
Код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import xlrd
import xlwt
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter, column_index_from_string
'''
Считывание таблицы
'''
file_obj = input('Введите путь к файлу: ') # /Users/markgurianov/Downloads/TMRCA.xlsx
workbook = load_workbook(filename=file_obj)
sheet = workbook.worksheets[0]
'''
Проверка правильности считывания
'''
row = int(input('Введите количество строк в таблице: '))
column = int(input('Введите количество столбцов в таблице: '))
if row == sheet.max_row and column == sheet.max_column:
    print('Чтение файла завершилось верно')
else:
    print('Ошибка чтения файла!!!')
'''
Получение дополнительных данных
'''
booling = 'н'
while booling == 'н':
    base_index = int(input('Введите индекс гаплотипа: '))
    print('Проверьте данные:')
    print('| ', end='')
    for column1 in range(3, sheet.max_column + 1):
        print('{: ^ 4} | '.format(sheet.cell(row=base_index, column=column1).value), end='')
        # print(str(sheet.cell(row=base_index, column=column1).value), end=' |')
    print()
    booling = input("Правильно ? (д/н): ")
    if booling == 'д':
        break
age = float(input('Введите средний возраст покаления: '))
'''
const
'''
mu = 0.0026
'''
Подсчитаем TMRCA в гаплоидных наборах относительно базового 
'''
new_column = sheet.max_column + 1
for row1 in range(2, sheet.max_row + 1):
    diff_square = 0
    count_locus = 0
    if row1 != base_index:
        for column1 in range(3, sheet.max_column + 1):
            a = int(sheet.cell(row=base_index, column=column1).value)
            b = sheet.cell(row=row1, column=column1).value
            if sheet.cell(row=row1, column=column1).value in [None, 'None', 'NoneType']:
                continue
            else:
                calculation = ((a - int(b)) ** 2) / 2
                diff_square += calculation
                count_locus += 1
    else:
        continue
    average_value = diff_square / count_locus
    TMRCA = age * (average_value / mu)
    coordinate = get_column_letter(new_column) + str(row1)
    sheet[coordinate] = TMRCA
 
workbook.save(file_obj)
Ошибка:
Traceback (most recent call last):
File "/Users/markgurianov/Documents/Python/main.py", line 49, in <module>
a = int(sheet.cell(row=base_index, column=column1).value)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

Отработал ваши 6 пунктов, но исправить сам не смог, уже встречал раньше эту ошибку и исправил этой проверкой
Python
1
if sheet.cell(row=row1, column=column1).value in [None, 'None', 'NoneType']:
На случай, если захотите запустить:
Введите путь к файлу: /Users/markgurianov/Downloads/TMRCA.xlsx
Введите количество строк в таблице: 113
Введите количество столбцов в таблице: 19
Чтение файла завершилось верно
Введите индекс гаплотипа: 2
Проверьте данные:
| 14 | 14 | 18 | 23 | 11 | 16 | 13 | 11 | 13 | 11 | 10 | 14 | 19 | 14 | 16 | 22 | 12 |
Правильно ? (д/н): д
Введите средний возраст покаления: 31.5
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
05.08.2019, 13:29
Цитата Сообщение от MarkStav Посмотреть сообщение
Отработал ваши 6 пунктов
сомневаюсь!
и снова моя коронка при общении с тобой - как ты понял нижеследующее?
Цитата Сообщение от MarkStav Посмотреть сообщение
int() argument must be a string, a bytes-like object or a number, not 'NoneType'
и переведя это что мы узнаем о вызове
Цитата Сообщение от MarkStav Посмотреть сообщение
sheet.cell(row=base_index, column=column1).value
? (подсказка -юзай пункт 1 из моей шпаргалки)
0
0 / 0 / 0
Регистрация: 09.07.2019
Сообщений: 28
05.08.2019, 13:33  [ТС]
1) Ошибка связана с тем, что значение пустой ячейки нельзя преобразовать в тип int
2)sheet.cell(row=base_index, column=column1).value - возвращает значение выбранной ячейки
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
05.08.2019, 13:57
Лучший ответ Сообщение было отмечено MarkStav как решение

Решение

Цитата Сообщение от MarkStav Посмотреть сообщение
sheet.cell(row=base_index, column=column1).value - возвращает значение выбранной ячейки
У вас ошибка в 49 строке, а вы проверяете на None (кстати, неправильно) вообще в другой.

Не делайте так.
a = int(sheet.cell(row=base_index, column=column1).value)
Python
1
2
3
a = sheet.cell(row=base_index, column=column1).value
if a is not None: # не None
    ....
И так везде, где может быть None. Сначала получили, записали в переменную, проверили переменную (а не снова получили как в 50-51 строках).
1
0 / 0 / 0
Регистрация: 09.07.2019
Сообщений: 28
05.08.2019, 14:03  [ТС]
Спасибо, теперь работает
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
05.08.2019, 14:36
Garry Galler, такой образовательный процесс прервал, он ведь завтра снова тему создаст потому что не читает исключений и не хочет разбираться

Цитата Сообщение от Garry Galler Посмотреть сообщение
if a is not None: # не None
почему не
Python
1
if a:
0
0 / 0 / 0
Регистрация: 09.07.2019
Сообщений: 28
05.08.2019, 14:44  [ТС]
При if a: по идее будет True при наличии значения и False если ячейка пустая
Вроде так
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
05.08.2019, 14:45
Цитата Сообщение от Welemir1 Посмотреть сообщение
такой образовательный процесс прервал,
Да, согласен, зря поспешил :-)

Цитата Сообщение от Welemir1 Посмотреть сообщение
if a:
Это если нам вообще не важно: None, 0 или ''. А если важно, тогда уж is None.
Но у ТС непонятно - что у него там в ячейках может быть. Поэтому пусть сам думает какой вариант для него правильнее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.08.2019, 14:45
Помогаю со студенческими работами здесь

Работа с двумя таблицами, мини база данных
Создаваемое приложение должно по каждому клиенту автосервиса хранить следующие сведения: Ф.И.О.; Марка и модель автомобиля; история...

Работа с Word и Exel через макрос, который запускается в Exel
Есть задача: проводятся расчеты в Эксель и из него открывается документ Ворд(эта часть работает), копируется таблица из Эксель и...

Как в листе Exel на форме в проекте убрать его меню при активизации?
Всем привет! Ребята, меня интересует такой вопрос. Как в листе Exel на форме в проекте убрать его меню при активизации и как сделать...

Работа в игровом проекте. Работа с php. Работа с платежными системами. Работа с базами данных
Работа в игровом проекте. Работа с php. Работа с платежными системами. Работа с базами данных. Стоимость: Договорная Срок...

Работа с exel в QT creator
Здравствуйте! Разрабатываю приложение для себя, так сказать учусь, у меня есть exel-файл, где храню информацию, вводимую пользователем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru