Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python f、 read()不在行间读取_Python_Regex_String_Parsing - Fatal编程技术网

Python f、 read()不在行间读取

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

我使用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

我使用以下代码进行解析,似乎我不知道如何指定我不关心行:

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解决方案,它在我的代码中运行顺利!