我使用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文件,不管是什么行,但它似乎不是......
谢谢你!
答案 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+
允许多个空格或换行符。