遍历 Excel 中的行并将它们切片以作为列表存储在 python 中

Iterate over row from Excel and slice them to store as list in python

我正在使用 python 3 版本并使用 xlrd 包与 excel sheets 一起工作 当前 excel sheet 与价格数字一起存储在单行中,如下所示

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 个值拆分行。 有什么办法可以优化这个循环吗? 编辑-2 虽然 运行 上面的代码我 运行 另一个问题 当我从行中读取值时,我得到的值如下。

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

@Grismar 提供的说明和指示很有帮助。 要添加,我有不同的线程(准确地说是 5 个)运行 每个价格从第一行开始直到达到 NULL。并且每个线程都会一个接一个的续价直到结束。

在您的代码中,您使用 xlrd.open_workbook(Price_LIST)、select 阅读了整个工作簿(.xlsx 格式),第一个 sheet 使用 sheet_by_index(0),然后继续循环按行号遍历 sheet 的行(跳过 header),根据循环参数的值将行的值分配给变量。

这导致 price_list_1 具有第 10 行的任何值,price_list_2 具有第 20 行的任何值,等等。

这不是您想要的,因为您似乎想要读取所有值,跳过 header 并将列表分成 sub-lists,每个元素不超过 10 个(虽然不清楚你为什么需要这个)。它也不会缩放,因为如果 sheet 有超过 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)