Python 文件内容匹配-购物清单程序

Python 文件内容匹配-购物清单程序,python,Python,我正在做一个购物清单比较程序。我们的想法是匹配一个CSV,该CSV只包含一个人的姓名和金额,如下所示: name, potatoes, jam, beer, ice cream Steve,2,6,2,5 Doreen,0,1,4,2 到一行txt。格式如下的文件: 啤酒、果酱、冰淇淋、土豆、果酱、啤酒、冰淇淋、果酱、冰淇淋、果酱、冰淇淋、果酱、土豆、果酱、冰淇淋 本例中的输出是.txt文件等于Steve(即,根据CSV,Steve买了两个土豆,.txt列出了两个土豆,以此类推,他买的所有其他

我正在做一个购物清单比较程序。我们的想法是匹配一个CSV,该CSV只包含一个人的姓名和金额,如下所示:

name, potatoes, jam, beer, ice cream
Steve,2,6,2,5
Doreen,0,1,4,2
到一行txt。格式如下的文件:
啤酒、果酱、冰淇淋、土豆、果酱、啤酒、冰淇淋、果酱、冰淇淋、果酱、冰淇淋、果酱、土豆、果酱、冰淇淋

本例中的输出是.txt文件等于Steve(即,根据CSV,Steve买了两个土豆,.txt列出了两个土豆,以此类推,他买的所有其他物品)。我们的目标是找到谁的购物清单在.txt中有描述——并且警告说,有时候根本没有匹配项

有多个CSV文件和多个.txt文件,用户将比较中使用的特定文件指定为命令行参数(一个用于CSV,一个用于.txt)。还有两种类型的CSV,每种CSV都有不同的标题(例如,一种有五个购物项目,而另一种有十个),因此无论选择哪种CSV,我的解决方案都需要工作。但是.txt文件的格式始终相同

我如何进行实际的比较,然后确定它是谁的列表? 我试过在
max(len)
上乱搞一下,但我基本上只找到了最长的字符,没有找到每个单词的单独出现处。下一步是将.txt中的
beer
计数与CSV中的
行[beer]
下的数字进行比较。我是否需要创建一个存储所有这些内容的数组?还是有更快的方法来比较两者?我应该使用
.fieldnames吗?

我尝试过类似的方法,但没有成功:

for field in fields:
str_length = len(field)
for i in range(1, len(sequence)+1):
    if (s[i:i+STR_length]==field):
        temp_count += 1

您可以使用字典为两个列表分配一个键和值:

data = ['name', 'potatoes', 'jam', 'beer', 'ice cream']
data_1 = ['Steve', '2', '6', '2', '5']

diction = dict(zip(data, data_1))
print(diction)
这将设置键:值对

{'name': 'Steve', 'potatoes': '2', 'jam': '6', 'beer': '2', 'ice cream': '5'}
要搜索键或值,可以使用字典理解:

search = input('Search: ')
result = {i: k for i, k in diction.items() if k == search or i == search}
print(result)
它将把key:value输出到您的搜索词(如果它存在于字典中)

Search: name
{'name': 'Steve'}

对于单行.txt文件,您可能需要使用
计数器
。 将文本文件读入列表或numpy数组。我们称之为
购物清单
。 现在以您的示例为例:

>>> from collections import Counter
>>> count_items = Counter(shopping_list)
>>> count_items
Counter({'jam': 6, 'ice cream': 5, 'potatoes': 2, 'beer': 2})
现在,如果要获取单个项目的计数,可以执行以下操作:

>>> count_items["jam"]
6
您还可以获取项目数:

>>> len(count_items)
4
我希望这已经有所帮助。一旦你分享了更多你已经拥有的代码,我或其他人也可以帮助你完成剩下的工作

编辑: 当你也用你的CSV制作字典时(每行一本),你可以比较它们。 你有一本字典

>>> diction
{'name': 'Steve', 'potatoes': '2', 'jam': '6', 'beer': '2', 'ice cream': '5'}
你能行

>>> name = diction.pop()
>>> name
'Steve'
>>>> diction
{'potatoes': 2, 'beer': 2, 'jam': 6, 'ice cream': 5}
然后你可以比较一下

>>> count_items == diction
True

将txt文件读入dict,其中键作为产品名称,值作为产品计数。然后将计数与CSV文件中的正确计数进行比较,看看是否所有计数都匹配。如果这是学校作业?是的,是学校作业。比较dict计数和CSV计数的最佳方法是什么?如果每个CSV中的键不同,这是否可行?是的,它将为从一个列表到另一个列表的所有内容设置键和值。因此,如果您在一个列表中有
[1,2,3,4,5]
,在另一个
目录中有
[a',b',c',d',e']
(zip(list_1,list_2))
创建
{1:'a',2:'b',3:'c',4:'d',5:'e'}
确定。所以你是说我需要从现实生活中的CSV/.txt对中设置一个示例,然后程序将理解其余文件中的关系?是的,它将对列表中的任何内容进行配对,搜索将通过其键或值返回与该列表关联的内容。只需逐行传递cvs,并在每次传递数据时刷新列表