1

我目前有一个 Excel 文件,其中一列 ItemID 和一列 ItemName 采用这种样式:

ItemID, ItemName
2, Apple
4, Orange
5, Pear
6, Banana
15, Kiwi

我愿意将此数据转换为最简单的任何格式,但我需要解释如何进行该转换。

我想传递这样的列表: ['Apple', 'Pear', 'Banana']

并让它输出这样的列表:[2,5,6]

我已经研究过使用 sqlite3 执行此操作,但我找不到如何将整个列表作为输入传递,也找不到一种简单的方法将我的 Excel 文件转换为 sqlite3 可以挖掘的某种 .sql 或 .db 文件通过。我真的不在乎我最终不得不将我的 Excel 文件转换成什么样的文件(甚至是文件类型项),我只是希望查找过程高效。

编辑:在我使用的实际情况下,大约有 8800 个项目。此外,每个都是唯一的,因此 ItemID 是唯一的,而 ItemName 是唯一的。也就是说,一些项目名称相似,只是在末尾添加了一个额外的单词,例如“Orange Small”和“Orange Large”。

4

2 回答 2

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)

希望这可以帮助

于 2012-09-30T02:59:23.093 回答
1

这基本上csv是@inspectorG4dget 答案的模块版本。首先,以csvExcel 格式保存文件,生成如下内容:

ItemID, ItemName
2, Apple
4, Orange
5, Pear
6, Banana
15, Kiwi

既然你说每个 ItemName 都是唯一的,我们可以使用字典来存储数据。在 python 2.7 中,使用像 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]
于 2012-09-30T03:06:15.597 回答