f.read()不在行

时间:2017-07-27 14:02:06

标签: python regex string parsing

我使用Python 3.6。我有一些我想在read.txt文件中检查的字符串。问题在于.txt文件的编写使得句子可以被剪切并放入不同的行。例如:

bla bla bla internal control over financial reporting or an attestation
report of our auditors

.txt文件在单词“证明”之后剪切句子,并在下一行中以“report”开头。我想查找文件中的整个句子,无论它是什么行(如果句子在文件中,则创建var1 = 1,否则为0)。

我使用以下代码进行解析(似乎我不知道如何指定我不打扰行):

string1 = 'internal control over financial reporting or an attestation report of our auditors'    
exemptions = []
for eachfile in file_list: #I have many .txt files in my directory
        with open(eachfile, 'r+', encoding='utf-8') as f:
            line2 = f.read()  # line2 should be a var with all the .txt file
            var1 = re.findall(str1, line2, re.I)  # find str1 in line2
            if len(re.findall(str1, line2, re.I)) > 0:
                exemptions.append('1')  # if it detects smthg, then append exemptions list with var1=1
            else:
                exemptions.append('0')  # otherwise var1= 0

知道如何做到这一点?我认为通过使用line2 = f.read(),我实际上是检查整个.txt文件,不管是什么行,但它似乎不是......

谢谢你!

1 个答案:

答案 0 :(得分:3)

您假设换行符与空格相同 - 它不是。尝试更改

line2 = f.read()

line2 = f.read().replace('\n', ' ').replace('\r', ' ')

这应该用空格替换文件中的任何换行符,从而允许您的搜索按预期工作。

您也可以这样做

line2 = ' '.join(line.rstrip('\n') for line in f)

您可以修改正则表达式:

var1 = re.findall(str1.replace(' ', '\s+'), line2, re.I)  # find str1 in line2
if var1:
    exemptions.append('1')
else:
    exemptions.append('0')

在正则表达式中,\s是任何间距字符,\s+允许多个空格或换行符。