Python-从文本文件中计算键值对
我有以下文本文件:Python-从文本文件中计算键值对,python,python-3.x,key-value,Python,Python 3.x,Key Value,我有以下文本文件: abstract 233:1 253:1 329:2 1087:2 1272:1 game 64:1 99:1 206:1 595:1 direct 50:1 69:1 1100:1 1765:1 2147:1 3160:1 每个密钥对是每个字符串在文档中出现的次数[docID]:[stringFq] 如何计算此文本文件中的密钥对数 您的正则表达式方法运行良好。这里是一个迭代方法。如果取消对print语句的注释,您将发现一些itermediate结果 import re
abstract 233:1 253:1 329:2 1087:2 1272:1
game 64:1 99:1 206:1 595:1
direct 50:1 69:1 1100:1 1765:1 2147:1 3160:1
每个密钥对是每个字符串在文档中出现的次数[docID]:[stringFq]
如何计算此文本文件中的密钥对数 您的正则表达式方法运行良好。这里是一个迭代方法。如果取消对print语句的注释,您将发现一些itermediate结果
import re
file = open('input.txt', 'r')
file = file.read()
numbers = re.findall(r"[-+]?\d*\.\d+|\d+", file)
#finds all ints from text file
numLen = len(numbers) / 2
#counts all ints, when I needed to count pairs, so I just divided it by 2
print(numLen)
给定的
%%file foo.txt
abstract 233:1 253:1 329:2 1087:2 1272:1
game 64:1 99:1 206:1 595:1
direct 50:1 69:1 1100:1 1765:1 2147:1 3160:1
代码
import itertools as it
with open("foo.txt") as f:
lines = f.readlines()
#print(lines)
pred = lambda x: x.isalpha()
count = 0
for line in lines:
line = line.strip("\n")
line = "".join(it.dropwhile(pred, line))
pairs = line.strip().split(" ")
#print(pairs)
count += len(pairs)
count
# 15
详细信息 首先,我们使用
with
语句,这是安全打开和关闭文件的习惯用法。然后,我们通过readlines()
将文件拆分为行。我们定义了一个条件函数(或谓词),稍后将使用它。lambda表达式用于方便起见,相当于以下函数:
def pred(x):
return x.isaplha()
我们初始化一个count
变量并开始迭代每一行。每一行可能都有一个尾随的换行符\n
,因此我们首先将它们剥离()
,然后再将行馈送到dropwhile
是一个特殊的itertools迭代器。当它迭代一行时,它将丢弃满足谓词的任何前导字符,直到到达第一个不满足谓词的字符为止。换句话说,在找到第一个非字母(恰好是空格)之前,将删除开头的所有字母。我们再次清理新行,去掉前导空格,剩下的字符串是split()
到对的列表中
最后,每行对的长度以增量方式添加到计数中。最终计数是对的所有长度之和
摘要
上面的代码显示了如何通过简单的迭代步骤处理基本的文件处理:
- 打开文件
- 将文件拆分为行
- 在迭代每一行时,清理并处理数据
- 输出结果
我建议你关掉电脑,拿一张纸和一支铅笔。用文字描述你将如何手工解决这个问题。不要担心python语法。只需写下解决方案所需的步骤。你应该在答案中添加解释。解决代码和解释的问题,而不仅仅是代码。正则表达式是一种次优的方法;通过对空格字符进行字符串拆分,然后减去1
(假设拆分字符串中的第一项始终是单词),可以更轻松、更容易地实现这一点。我将对此进行研究!谢谢你的回答!我是Python新手,所以这是非常有建设性的!