我需要在python中创建一个查看给定文件的程序。让我们说acronyms.txt,然后返回一个百分比值,包含多少行包含至少1个三个字母的首字母缩写词。 例如:
NSW is a very large state.
It's bigger than TAS.
but WA is the biggest!
阅读本文后,它应该返回66.7%,因为66.7%的行包含三个字母的首字母缩略词。如您所见,它也会四舍五入到小数点后第一位。我对正则表达式不是很熟悉,但我认为正则表达式最简单。
编辑:
我已经完成了代码,但我需要它来识别它们之间有点的首字母缩略词,EG N.S.W应该被认为是首字母缩略词。我该怎么做?
任何帮助将不胜感激!
答案 0 :(得分:3)
你可以这样做:
import re
cnt = 0
with open('acronyms.txt') as myfile:
lines = myfile.readlines()
length = len(lines)
for line in lines:
if re.search(r'\b[A-Z]{3}\b', line) is not None:
cnt += 1
print("{:.1f}%".format(cnt/length*100))
r'[A-Z]{3}'
连续匹配三个(且只有三个)大写字母。如果找到了搜索,那么我们会添加一个计数。
然后我们只需将计数除以行的长度,然后按照您所示的方式打印结果。
答案 1 :(得分:2)
您可以执行以下操作:
total_lines = 0
matched_lines = 0
for line in open("filename"):
total_lines += 1
matched_lines += bool(re.search(r"\b[A-Z]{3}\b", line))
print "%f%%" % (float(matched_lines) / total_lines * 100)
注意搜索模式中的'\ b' - 它匹配单词的开头或结尾的空字符串。它可以帮助您防止与长度超过3的缩写词('asdf ASDF asdf')或单词内的首字母缩略词('asdfASDasdf')发生意外匹配。