我目前有一个Excel文件,其中一列为ItemID,另一列为此样式的ItemName:
ItemID, ItemName
2, Apple
4, Orange
5, Pear
6, Banana
15, Kiwi
我愿意将这些数据转换为最简单的格式,但我需要解释如何进行转换。
我想传递一个这样的列表: ['Apple','Pear','Banana']
让它输出如下列表: [2,5,6]
我已经看过用sqlite3做这个,但我找不到如何传递整个列表作为输入,我找不到一种简单的方法将我的Excel文件转换为某种类型的.sql或.db文件sqlite3可以挖掘出来。我真的不在乎什么类型的文件(甚至文件类型的项目)我最终必须将我的Excel文件转换成,我只是希望查找过程有效。
编辑: 在实际情况下,我正在使用大约8800项。此外,每个都是唯一的,因此ItemID是唯一的,ItemName是唯一的。也就是说,一些项目名称相似,最后只添加了一个额外的单词,如“Orange Small”和“Orange Large”。
答案 0 :(得分:3)
假设您将此文件作为文本文件,如下所示:
2, Apple
4, Orange
5, Pear
6, Banana
15, Kiwi
然后你可以这样做:
def readFile(fpath):
answer = {}
with f as open(fpath):
for line in f:
id, name = line.split(', ')
id = int(id)
name = name.strip()
answer[name] = id
return answer
def getIDs(names, nameIDs):
return [nameIDs[name] for name in names]
def main():
nameIDs = readfile('path/to/file')
names = ['Apple', 'Pear', 'Banana']
ids = getIDs(names, nameIDs)
希望这有帮助
答案 1 :(得分:1)
这基本上是@ inspectorG4dget的答案的csv
模块版本。首先,从Excel中以csv
格式保存文件,生成如下内容:
ItemID, ItemName
2, Apple
4, Orange
5, Pear
6, Banana
15, Kiwi
由于您说每个ItemName都是唯一的,我们可以使用字典来存储数据。在python 2.7中,使用了一个helper函数,比如inspectorG4dget的getIDs:
import csv
with open("itemids.csv","rb") as fp:
reader = csv.reader(fp, skipinitialspace=True)
fp.readline() # skip header
name_to_id = {name: int(id) for id, name in reader}
def getIDs(name_to_id, names):
return [name_to_id[name] for name in names]
我们可以构建一个字典并访问它:
>>> name_to_id
{'Orange': 4, 'Kiwi': 15, 'Pear': 5, 'Apple': 2, 'Banana': 6}
>>> getIDs(name_to_id, ["Apple", "Pear", "Banana"])
[2, 5, 6]