如何从数组创建列表

问题描述 投票:0回答:1

我有一个 Excel 文件,需要从行和列中获取数据并从中生成 JSON 文本。我用的是openpyxl。

A 栏 B 栏
城市1
城市2 10.500

假设这是我的 Excel 文件。

我需要其中的数据看起来像这样:

[{"City 1": None, "City 2": 10500}]

我做了什么:

wb = load_workbook('C:\\smth\\form.xlsx', data_only=True)
ws1 = wb['page']

ws1.delete_rows(idx=1, amount=7) #deleted first rows 'cause I don't need them

sheet = ws1
for i in range(10, 19):
        city = sheet.cell(row=i, column=1).value
        valuecity = sheet.cell(row=i, column=2).value
        
        a = [city, valuecity]

        xs = [a]
        s = ''.join(str(x) for x in xs)

我知道这可能是错误的并且不适合我的要求,我只是不知道如何以其他方式获取我需要的数据。

所以将其转换为列表后,它是这样的:

['City 1', None]
['City 2', '10500']

当我将其转换为字符串并假设要删除最后一个字符时,我得到了:

['City 1', None
['City 2', '10500'

虽然我只想要一个普通的列表和一个普通的字符串。有人可以帮忙吗?看起来 Python 将其读取为一个变量中的两个不同字符串。

python arraylist openpyxl
1个回答
0
投票

如果您的目标是将此数据输出为

.json
文件,您可以首先将每行格式化为 字典,将该字典附加到数组中,然后使用
json.dump
将数组保存为 JSON。

import json
wb = load_workbook('C:\\smth\\form.xlsx', data_only=True)
ws1 = wb['page']

ws1.delete_rows(idx=1, amount=7) #deleted first rows 'cause I don't need them

sheet = ws1

data = []
for i in range(10, 19):
        city = sheet.cell(row=i, column=1).value
        valuecity = sheet.cell(row=i, column=2).value
        
        #format this row as a dictionary
        row = {city:valuecity}
        #append dictionary to list
        data.append(row)

with open('/path/to/file/data.json', 'w') as f:
     json.dump(data, f, indent=4)

虽然这个解决方案应该有效,但您也可以考虑使用像 pandas 这样的库。您可以使用

pandas.read_excel
将数据导入到
dataframe
(pandas 的自定义数据格式)中。查看
read_excel
的参数
skip_rows
usecols
了解如何忽略电子表格中不相关的部分。然后,您可以使用数据帧方法
to_json
将数据保存为 JSON 文件。确保使用
orient=records
作为参数来获取您正在查找的行列表。

© www.soinside.com 2019 - 2024. All rights reserved.