Python无法读取包含特定字符串的文件

约翰尼·亨特(Johnnyhunter)

我编写了一个函数来删除字符串中的某些单词和字符。使用文件将有问题的字符串读入程序。该程序可以正常工作,除非文件的任何位置在文件正文中的任何位置都包含以下内容。

安全启动的安全更新(3177404)此安全更新解决了Microsoft Windows中的漏洞。如果攻击者在目标设备上安装了受影响的策略,则该漏洞可能允许绕过安全启动安全功能。攻击者必须具有管理特权或物理访问权限才能安装策略并绕过安全启动。

我从未经历过这种奇怪的行为。有人有什么建议吗?

这是我编写的功能。

def scrub(file_name):
    try:
        file = open(file_name,"r")
        unscrubbed_string = file.read()
        file.close()

        cms = open("common_misspellings.csv","r")
        for line in cms:
            replacement = line.strip('\n').split(',')
            while replacement[0] in unscrubbed_string:
                unscrubbed_string = unscrubbed_string.replace(replacement[0],replacement[1])

        cms.close()

        special_chars = ['.',',',';',"'","\""]

        for char in special_chars:
            while char in unscrubbed_string:
                unscrubbed_string = unscrubbed_string.replace(char,"")

        unscrubbed_list = unscrubbed_string.split()

        noise = open("noise.txt","r")
        noise_list = []

        for word in noise:
            noise_list.append(word.strip('\n'))

        noise.close()

        for noise in noise_list:
            while noise in unscrubbed_list:
                    unscrubbed_list.remove(noise)
        return unscrubbed_list

    except:
        print("""[*] File not found.""")
ez

您的代码可能正在挂起,因为您的.replace()调用处于while循环中。如果对于.csv文件的任何特定行,该replacement[0]字符串是其对应的的子字符串replacement[1],并且如果其中任何一个出现在您的关键文本中,则while循环将永远不会结束。实际上,您根本不需要while循环-单个.replace()调用将替换所有出现的事件。

但这只是您使用毯子的当前方法会遇到的问题的一个示例。unscrubbed_string.replace(...)您要么需要使用正则表达式替换(来自re)模块,要么自己将字符串分解成单词,然后逐字逐句地工作,改为单词。为什么?好吧,这是一个简单的示例:'Teh'需要更正为'The'-但是,如果文档中包含对的引用,该'Tehran'怎么办?您的“安全启动”文本将包含与此类似的示例。

如果您使用正则表达式路线,则符号会\b通过匹配任何种类的单词边界(字符串的开头或结尾,空格,标点符号)来解决此问题。这是一个简化的示例:

import re

replacements = {
    'Teh':'The',
}
unscrubbed = 'Teh capital of Iran is Tehran. Teh capital of France is Paris.'

better = unscrubbed
naive = unscrubbed
for target, replacement in replacements.items():
    naive = naive.replace(target, replacement)

    pattern = r'\b' + target + r'\b'
    better = re.sub(pattern, replacement, better)

print(unscrubbed)
print(naive)
print(better)

输出,其中强调了以下错误:

伊朗首都德黑兰是。法国的首都是巴黎。unscrubbed

伊朗的首都是Theran法国的首都是巴黎。naive

伊朗的首都是德黑兰。法国的首都是巴黎。better

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SAS:读取包含特定字符串的所有文件

在python中读取以特定字符串开头的文件

无法读取任何包含特定字符的文件

使用文件名读取最新文件包含python中的字符串

读取文件到字符串(python)

从 Python 中的文本文件中读取包含文本字符串的整行

VBA从特定字符串读取文件到文件结尾

使用Python zipfile从ZIP中提取文件名中包含特定字符串的文件

如何在python中使用索引循环和读取文件,特定的整数或字符串?

检查python字符串是否包含特定字符

从 xml 文件中读取特定字符串 c#

C#-从特定字符串读取文件中的字节

不断读取文件中的特定字符串?

从文件中读取字符串的特定区域

Python递归搜索目录,仅显示包含特定字符串的文件

名称中包含特定字符串的文件数

查找包含特定字符串的文件数

保护名称中包含特定字符串的文件

如何从文件中删除包含特定字符串的行?

查找不包含特定字符串的文件

如何删除文件中包含特定字符串的行?

如何过滤包含特定模式的字符串(文件路径)

在文件中查找包含特定字符串的行

列出所有包含特定字符串的文件

无法将以逗号分隔的字符串写入/读取文件

字符串标记器代码无法正确读取文件

Python:文件名包含字符串(元字符?)

Hadoop-搜索特定字符串,然后返回包含字符串的文件名

无法将从文件读取的字符串与Java字符串进行比较