遍历 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)
我正在使用 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)