我有一个 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 将其读取为一个变量中的两个不同字符串。
如果您的目标是将此数据输出为
.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
作为参数来获取您正在查找的行列表。