在Python 3.x

时间:2016-09-19 19:47:09

标签: python-3.x

该程序读取大型文本文件目录。将搜索每个文件以查找特定字符串(具有正好两位小数的美元金额)。 我正在运行以下代码,其目的是确定特定金额是否在文本文件中:

d = {}
with open('numbers.txt') as f:
  d = dict(x.rstrip().split(None, 1) for x in f)

import os

for filename in os.listdir(os.getcwd()):
    string = d.get(filename, "!@#$%^&*")
    if string in open(filename, 'r').read():
        with open("outfile.txt", 'a') as out:
            out.write("{} {} {}\n".format(filename, string, 1))
    else: 
        with open("ibes_in.txt", 'a') as out:
            out.write("{} {} {}\n".format(filename, string, 0))

numbers.txt包含文件名(.txt文件)列表和美元金额。美元金额字符串将位于文件名的文件中,或者不会。

在大多数情况下,此代码可以正常工作,除非它找到匹配数超过两位数的数字。例如,如果搜索字符串是1.42,我不希望它匹配1.423。

如果搜索字符串是1.42

示例输入:

"该公司报告了1.42美元......"

示例结果:true

示例输入:

"该公司的增长率为1.427 ......"

示例结果:false

美元符号的使用并不普遍,有时数字被包含在()中以表示否定。我相信正则表达式\ b是标记两位数字结尾的正确方法,但我不确定如何在我已有的代码中实现它。

1 个答案:

答案 0 :(得分:0)

实际上,您可以使用正则表达式和\b

执行此操作
if re.search('\\b' + re.escape(string) + '\\b', open(filename, 'r').read()):