1

Excelドキュメントからエクスポートされたテキストファイルがあります。その列に沿って各サプライヤーが一覧表示され、その下の行にそれぞれの価格が表示されます。最後に、最小サプライヤーと最小価格が表示されます。例:

Project: Name.
Supplier A, Supplier B, Supplier C, Lowest Price, Winning Supplier
600, 900, 650, 600, Supplier A 

何百ものExcelドキュメントを検索する必要があるため、それぞれのテキストファイルを作成し、Pythonでデータを処理するのが最善だと思いました。

Pythonのマニュアルを読みましたが、結果を得るのが難しいと感じています。私が望む最終的な結果は、単一のフォルダーから多数のファイルを処理できるようにすることです。私の目的は、各サプライヤーをリストし、各プロジェクトで成功したかどうかを検索できるようにすることです。成功したかどうかは、ドルで、または勝ったサプライヤーに対する価格からのパーセンテージでどれほどの差があったかを調べます。

誰かがこれを構築し始める場所についていくつかの援助を与えることができますか?

グレギーD

4

2 に答える 2

2

この問題に関する詳細な情報もありません。しかし、私には、xlsファイルにはかなりのセマンティックが含まれているように見えるため、全体的には直接xlsファイルを操作する方がよいように思えます。ここを見てください:http : //www.python-excel.org/、xlrdは本当に素晴らしくて使いやすいです。

于 2012-08-21T13:59:17.767 に答える
2

おそらく、サプライヤデータをクラスにカプセル化します。

class Supplier(object):
    def __init__(self):
        self.projects = []  #winning projects
        self.bids = []      #how much this supplier bid, winning bid.

次に、各データファイルを個別に次のように解析します。

from collections import defaultdict
def parse_datafile(fname,output=None):
    if output is None:
       output = defaultdict(Supplier)
    with open(fname,r) as f:
       project = f.readline().split(':')[1].strip()
       suppliers = map(str.strip,f.readline().split(',')[:-2])
       bids = map(str.strip,f.readline().split(','))
       winner = bids[-1]
       win_amt = bids[-2]

       for s,b in zip(suppliers,bids):
           output[s].bids.append(int(b),int(win_amt))
       output[winner].projects.append(project)
    return output

これで、辞書を作成できます。

 import glob
 from Collections import defaultdict
 d = defaultdict(Supplier)
 for fname in glob.iglob('*.txt'):
     d = parse_datafile(fname,output=d)

そして、あなたはそのサプライヤーに関する情報を以下によって得ることができます:

print d['supplier A'].projects
print [ float(bid)/winbid for bid,winbid in d['supplier A'].bids ]

もちろん、.xlsPythonでファイルを直接解析するためのライブラリがあります。これは、私の手動の解析関数よりも適している可能性があります。しかし、関連するすべての情報を含むクラスを保持するdefaultdictは、おそらくここで最善の策だと思います(データの解析方法に関係なく)。

于 2012-08-21T13:59:44.433 に答える