搜索大量的文本文件python

时间:2012-08-21 13:23:16

标签: python excel text

我有一个从Excel文档导出的文本文件。在其列中列出了每个供应商,在下面的行中是相应的定价。最后,它将列出最低供应商和最低价格。例如:

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

因为我需要搜索数百个excel文档,我认为最好创建每个文件的文本文件并在python中处理数据。

我已经阅读了python手册,我发现很难得到任何结果。我想要的最终结果是能够处理单个文件夹中的大量文件。我的目标是能够列出每个供应商并搜索他们在每个项目上是否成功,以及他们是不是以美元计算的差异或从他们的价格到获胜供应商的百分比。

任何人都可以提供一些帮助,从何处开始构建它?

Greggy D

2 个答案:

答案 0 :(得分:2)

我也缺少有关该问题的详细信息。但对我来说,总的来说听起来你最好直接使用xls文件,因为它们似乎包含了很多语义。看看这里:http://www.python-excel.org/,xlrd非常棒且易于使用。

答案 1 :(得分: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 ]

当然,有些库可以直接在python中解析.xls文件,这可能比我的手动解析函数更合适。但我仍然认为包含所有相关信息的类的defaultdict可能是你最好的选择(无论你如何设法解析数据)。