gpt4 book ai didi

python - 非 ASCII 编码文件中的换行符

转载 作者:行者123 更新时间:2023-12-01 00:01:06 25 4
gpt4 key购买 nike

我正在使用 Python 2.6 读取带有 Windows 行结尾 ('\r\n') 的 latin2 编码文件。

import codecs

file = codecs.open('stackoverflow_secrets.txt', encoding='latin2', mode='rt')
line = file.readline()
print(repr(line))

输出:u'登录:yabcok\n'

file = codecs.open('stackoverflow_secrets.txt', encoding='latin2', mode='r')
line = file.readline()
print(repr(line))

file = codecs.open('stackoverflow_secrets.txt', encoding='latin2', mode='rb')
line = file.readline()
print(repr(line))

输出:u'密码:l1x1%Dm\r\n'

我的问题:

  1. 为什么文本模式不是默认模式?文件另有说明。 codecs 模块通常与二进制文件一起使用吗?
  2. 为什么换行符没有从 readline() 输出中删除?这很烦人而且多余。
  3. 有没有办法为非 ASCII 编码的文件指定换行符。

最佳答案

你确定你的例子是正确的吗? documentation编解码器模块的说明:

Note: Files are always opened in binary mode, even if no binary mode was specified. This is done to avoid data loss due to encodings using 8-bit values. This means that no automatic conversion of '\n' is done on reading and writing.

在我的系统上,使用 Latin-2 编码文件 + DOS 行结尾,“rt”、“r”和“rb”之间没有区别(免责声明:我在 Linux 上使用 2.5)。

open 的文档也提到没有“t”标志,因此这种行为看起来有点奇怪。

换行符不会从行中删除,因为并非 readline 返回的所有行都以换行符结尾。如果文件不以换行符结尾,则最后一行不包含换行符。 (我显然无法想出更好的解释)。

换行符不会因编码而异(至少在使用 0-127 的 ASCII 的编码中不会),仅因平台而异。您可以在打开文件时在模式中指定“U”,Python 将检测任何形式的换行符,无论是 Windows、Mac 还是 Unix。

关于python - 非 ASCII 编码文件中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/513675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com