1

現在、次のスタイルのItemID用に1列、ItemName用に1列のExcelファイルがあります。

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

私はこのデータを最も簡単な形式に変換することを受け入れていますが、その変換を行う方法の説明が必要です。

次のようなリストを渡したい:['Apple'、'Pear'、'Banana']

そして、次のようなリストを出力します:[2,5,6]

私はsqlite3でこれを行うことを検討しましたが、リスト全体を入力として渡す方法が見つからず、Excelファイルをsqlite3が掘ることができるある種の.sqlまたは.dbファイルに変換する簡単な方法を見つけることができません終えた。どのような種類のファイル(またはファイルタイプのアイテム)に変換する必要があるかは本当に気にしません。ルックアッププロセスを効率的にしたいだけです。

編集:実際のケースでは、約8800のアイテムがあります。また、ItemIDが一意で、ItemNameが一意であるように、それぞれが一意です。とはいえ、「オレンジスモール」や「オレンジラージ」など、一部のアイテム名は末尾に単語が追加されているだけで似ています。

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の回答のモジュールバージョンです。まず、ファイルを Excel の形式で保存すると、次のcsvような結果が得られます。

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 に答える