Python 搜索大量的文本文件
我有一个从Excel文档导出的文本文件。在其列中列出了每个供应商,并在下面的一行中列出了各自的定价。最后将列出最低供应商和最低价格。例如: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手册,我发现
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--我已经把这个样本放在你的帖子里了,我还做了一些其他的编辑工作,希望这篇帖子更容易阅读/理解。如果我做了任何不正确的事情或改变了你的意思,请随时重新编辑。