Python f、 read()不在行间读取
我使用Python3.6。我有一些字符串要签入read.txt文件。问题是.txt文件的编写方式使得句子可能被剪切并放在不同的行中。例如:Python f、 read()不在行间读取,python,regex,string,parsing,Python,Regex,String,Parsing,我使用Python3.6。我有一些字符串要签入read.txt文件。问题是.txt文件的编写方式使得句子可能被剪切并放在不同的行中。例如: bla bla bla internal control over financial reporting or an attestation report of our auditors txt文件在单词detection之后剪切句子,并在下一行以report开头。我想在文件中查找整个句子,不管它是哪一行,如果句子在文件中,则创建var1=1,否则创建0
bla bla bla internal control over financial reporting or an attestation
report of our auditors
txt文件在单词detection之后剪切句子,并在下一行以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文件,而不考虑行,但它似乎不是这样
无论如何谢谢你 假设换行符与空格相同-事实并非如此。试着改变
line2 = f.read()
到
这将用空格替换文件中的任何换行符,从而允许您的搜索按预期进行
你也可以这样做
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+允许多个空格或换行符。假设换行符与空格相同-事实并非如此。试着改变
line2 = f.read()
到
这将用空格替换文件中的任何换行符,从而允许您的搜索按预期进行
你也可以这样做
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+允许使用多个空格或换行符。正如@asongtoruin所说,当文件被读取时,它读取的句子在证明和报告之间有一个\n,这意味着需要用空格替换,“”否则,句子将有一个与您的regexAs@asongtoruin不匹配的\n。他说,当文件被读取时,它会在证明和报告之间读取一个\n的句子,这意味着需要用一个空格来替换,“”否则,句子将有一个与您的regexI不匹配的\n,我假设您的意思是。替换“\n”,''。替换'\r',''?@Brunodesshuilliers哇!在正则表达式中读取sub并过度兴奋,这是一个好地方。@MoeA同意-将其放入“”。joinf.readlines无法解决问题-splitlines将linesep保留在字符串的末尾。您希望将“”joinline.rstrip\n用于f中的行,这也避免了在内存中复制整个文件内容两次。非常感谢!最后,我选择了line2='''.joinline.rstrip'\n'作为f中的line解决方案,它在我的代码中运行顺利!我猜你的意思是。替换“\n”,“替换“\r”,“替换”?@Brunodesshuilliers哇!在正则表达式中读取sub并过度兴奋,这是一个好地方。@MoeA同意-将其放入“”。joinf.readlines无法解决问题-splitlines将linesep保留在字符串的末尾。您希望将“”joinline.rstrip\n用于f中的行,这也避免了在内存中复制整个文件内容两次。非常感谢!最后,我选择了line2='''.joinline.rstrip'\n'作为f中的line解决方案,它在我的代码中运行顺利!