Python 搜索大量的文本文件

Python 搜索大量的文本文件,python,excel,text,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手册,我发现

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

Project: Name.
Supplier A, Supplier B, Supplier C, Lowest Price, Winning Supplier
600, 900, 650, 600, Supplier A 
因为我需要搜索数百个excel文档,我认为最好创建每个文档的文本文件并用python处理数据

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

有人能提供一些帮助,从哪里开始建立这个


Greggy D

我也缺少关于这个问题的详细信息。但对我来说,总的来说,您最好直接使用xls文件,因为它们似乎包含相当多的语义。请看这里:,xlrd非常好用。

我也缺少关于这个问题的详细信息。但对我来说,总的来说,您最好直接使用xls文件,因为它们似乎包含相当多的语义。请看这里:,xlrd非常好用。

我可能会将供应商数据封装在一个类中:

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(包含所有相关信息的类)可能是您在这里的最佳选择(无论您如何解析数据)。

我可能会将供应商数据封装在一个类中:

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(它包含包含所有相关信息的类)可能是您在这里的最佳选择(无论您如何解析数据)。

您能更明确一点吗?例如,我假设文件是csv,但实际显示文件格式会很有用…这很难,因为我更愿意上传,但下面是一个简单的示例。首先,你如何接受答案,你是否回答,谢谢,用勾号解决?。我所指的第一行示例是:Project:Name。第二行显示:供应商A、供应商B、供应商C、最低价格、中标供应商。第三行是:600900650600,供应商按问题和格式填写it@GreggyD--我已经把这个样本放在你的帖子里了,我还做了一些其他的编辑工作,希望这篇帖子更容易阅读/理解。如果我做了任何不正确的事情或改变了你的意思,请随意重新编辑。你能更明确一点吗?例如,我假设文件是csv,但实际显示文件格式会很有用…这很难,因为我更愿意上传,但下面是一个简单的示例。首先,你如何接受答案,你是否回答,谢谢,用勾号解决?。我所指的第一行示例是:Project:Name。第二行显示:供应商A、供应商B、供应商C、最低价格、中标供应商。第三行是:600900650600,供应商按问题和格式填写it@GreggyD--我已经把这个样本放在你的帖子里了,我还做了一些其他的编辑工作,希望这篇帖子更容易阅读/理解。如果我做了任何不正确的事情或改变了你的意思,请随时重新编辑。