Выполните итерацию по строке из Excel и нарежьте их, чтобы сохранить в виде списка в python - PullRequest
0 голосов
/ 05 марта 2020

Я использую python 3 версию и работаю с листами Excel с использованием пакета xlrd. В настоящее время лист Excel хранится с номерами цен в одной строке, как показано ниже

price
10
22
34
45

Эти числа будут автоматически генерироваться на сервере и Значения строк необходимо вынести и сохранить в разных списках (размер одного списка не более 10), что-то вроде

price_list_1 = price.row_values(10)
price_list_2 = price.row_values(11,20)
...
...

, чтобы можно было сохранять первые 10 значений и увеличивать для хранения еще 10 значений до price_list_2 и т. д. на. в настоящее время для открытия и чтения я делаю, как показано ниже.

Price_LIST = 'Daily_price_list/' + 'Price_List_2020.xlsx'
PriceList = xlrd.open_workbook(Price_LIST)
List = PriceList.sheet_by_index(0)

Я прошел некоторые ответы здесь и попытался, но не получилось. нужна помощь здесь.

РЕДАКТИРОВАТЬ

Я могу сделать это с помощью кода ниже.

count = 0
for count in range(2, List.nrows):
    if count < 11:
        price_list_1 = List.row_values(count)
        print('\n Printing price_list_1\n',price_list_1)
    elif 10 < count < 21:
        price_list_2 = List.row_values(count)
        print('\n Printing price_list_2\n',price_list_2)
    elif 20 < count < 31:
        price_list_3 = List.row_values(count)
        print('\n Printing price_list_3\n',price_list_3)
    elif 30 < count < 41:
        price_list_4 = List.row_values(count)
        print('\n Printing price_list_4\n',price_list_4)
    elif 40 < count < 51:
        price_list_5 = List.row_values(count)
        print('\n Printing price_list_5\n',price_list_5)
        count + 1

с этим я могу разбить строку с 10 значениями в каждом списке. Можно ли как-нибудь оптимизировать это l oop? РЕДАКТИРОВАТЬ -2 Во время работы над кодом я столкнулся с другой проблемой, когда читал значения из строк, которые я получаю, как показано ниже.

['10', '', '', '']

Пояснения и указатели, предоставленные @Grismar Helped. Чтобы добавить, у меня есть различные потоки (5, если быть точным), работающие с каждой ценой, начиная с первой строки, пока она не достигнет NULL. И каждый поток будет продолжать цену по одному до конца.

1 Ответ

0 голосов
/ 10 марта 2020

В вашем коде вы читаете всю книгу (в формате .xlsx), используя xlrd.open_workbook(Price_LIST), выбираете первый лист, используя sheet_by_index(0), а затем переходите к l oop по строкам этого листа по номеру строки (пропуская заголовок), присваивая значения строки переменной на основе значения параметра l oop.

В результате price_list_1 будет иметь значение того, что находится в строке 10, price_list_2 имея значение того, что находится в строке 20, и т. д. c.

Это не то, что вы намереваетесь, так как вы, похоже, хотите прочитать все значения, пропуская заголовок и разделяя список на sub. -списки не более 10 элементов каждый (хотя неясно, зачем вам это нужно). Он также не масштабируется, так как вы столкнетесь с проблемами, если у листа будет более 50 значений.

Желаемый результат может быть достигнут с помощью всего лишь нескольких строк кода:

import xlrd

# get the first sheet from the workbook
price_sheet = xlrd.open_workbook('price.xlsx').sheet_by_index(0)

# get all the values from the first column, skipping the first line
values = price_sheet.col_values(0, 1)
# get values in groups of 10
groups_of_ten = [values[i:i+10] for i in range(0, len(values), 10)]

print(groups_of_ten)
...