【问题标题】:Python is replacing characters in my string when reading it from a text document从文本文档中读取字符串时,Python 正在替换字符串中的字符
【发布时间】:2021-01-19 06:28:37
【问题描述】:

在读取文本文档时,python 似乎正在用其他字符替换其中的一部分。

以下是文本文档的内容:

    zKeh&aZTo@kgLPo2
    r#Zd[$xcGa()rd:l
    asdf uo NAgyu$\+
    vB=# dsU Zkd sdV
    bb !w#d#Jkr{Pd$}
    CehD *(T izP dx 
    mMoOww}lk~"cizPx
    czgjueo#z@vruo<>
    g$$ \|T{ Z$$ikmp

(我们正在为一个学校项目解密它。由于解密它的代码是在 python 更改字符串之后发生的,所以我不包括代码。)

这是用于读取文本文档的代码:

    # Open both the rules and test
    fileTextDoc = open("test.txt")
    fileRules = open("rule.txt")
    
    # Put each line of the text file into a list
    strTextDoc = fileTextDoc.readlines()

当 readlines() 被触发时,它会将每一行放入一个列表中,但在此之后字符串都会发生变化:

(我知道在文本文档中创建新行时会创建一个不可见的 '\n',稍后会在代码中删除'\n'。)

    0:'zKeh&aZTo@kgLPo2\n'
    1:'r#Zd[$xcGa()rd:l\n'
    2:'asdf uo\tNAgyu$\\+\n'
    3:'vB=# dsU Zkd sdV\n'
    4:'bb !w#d#Jkr{Pd$}\n'
    5:'CehD *(T izP dx\t\n'
    6:'mMoOww}lk~"cizPx\n'
    7:'czgjueo#z@vruo<>\n'
    8:'g$$ \\|T{ Z$$ikmp\n'

【问题讨论】:

  • 您指的更改是指额外的反斜杠吗?

标签: python list text document readlines


【解决方案1】:

打印的内容与输入的内容没有任何不同。 \t 是一个制表符(在输入中 ),\\\ 字符的转义码。而且,如您所知,\n 是换行符。

【讨论】:

    【解决方案2】:

    您可能想查看String literals。很像换行符。这些字符只出现在表示中,它们实际上并不是新字符。如果您检查,您会发现行的长度(通过 len())和原始文本的长度是相同的。

    例如,\\ 实际上是我们所看到的 \,但因为 \ 用于某些字符(如换行符 \n),所以表示为 \\

    【讨论】:

    • 非常感谢。这确实阐明了为什么大多数变化正在发生。
    【解决方案3】:

    添加的额外字符是\t\\t 在空格实际上是制表符时出现。 \ 被替换为 \\,因为它正在被转义。由于\ 在转义字符(\n、\t 等)之前使用,为了识别纯\,额外添加了\

    如果您在文本文件中有实际为abc\n 的文本,如果您不转义\,程序会将其解释为新行。为了避免这种情况,所有\ 都被转义了。

    【讨论】:

      【解决方案4】:

      如果是列表,则使用列表推导函数对每个元素进行替换。将“\n”替换为空格

      strTextDoc = [s.replace('\n','') for s in infileTextDoc.readlines()]
      
      

      【讨论】:

      • 哦,是的,我们可以使用列表理解
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      相关资源
      最近更新 更多