Python 中的 ^M、$ 和 \n(换行符)有什么区别?
What is the difference between ^M, $, and \n (newline) in Python?
我正在处理一个文本文件(包含电子名片),需要删除每行末尾的 ^M(保留换行符),但 NOTES 字段除外(因为 ^M 似乎表示该行继续并环绕)。请参阅从文件的 vi 编辑器中截取的附图,其中换行符由 vi 自动显示为蓝色...
如果我用with语句读取文件的行(处理后写入),我应该如何处理每一行?
更广泛地说,Python 中的 ^M、$ 和 \n(换行符)有什么区别?各自的作用是什么?
请注意,我的问题的重点与以下内容完全无关:
当然,我可以通过输入 s/\n // 或使用 re 或什至使用序列化或什至使用 vobject 中的 sortedChildren 方法来删除 vi 中 NOTES 字段中的奇怪行为。但这不是我提问的重点。
关注面更广。这是为了了解这个 ^M 字符是什么,它是否与换行符有关,是否与 Python 或只是一个 vobject 构造有关。如果是后者,并且 ^M 没有一般含义,为什么 vi 编辑器将其标记为蓝色?我觉得有点奇怪的是,在 vi 中,这些带有 ^M 的换行符后跟一个回车符 return 和一个空白 space 就好像“^M$”是一个特殊的序列来表示 "unintentional line break"... 同样,这三个字符序列是 vobjects 特有的,更通用还是只是我想象的一部分(在这三种情况中的任何一种情况下,为什么 vi 上的蓝色)。
我在当前问题中试图理解的是,为什么 vi 将 ^M 标记为蓝色,$ 在 vi 中有什么区别,天气这两个字符在 python 中有什么特殊含义。因为我注意到 vi 在与 "NOTES" 字段相关的 returns 中设置了 ^M,它似乎具有固定长度(不管 return 在 NOTES 上中断),我正在尝试明白为什么,我还没有找到任何解释。
Individual lines within vCard are delimited by […] a CRLF sequence (U+000D followed by U+000A).
[…]
Long logical lines of text can be split into a multiple-physical-line representation […] by inserting a CRLF immediately followed by a single white space character (space (U+0020) or horizontal tab (U+0009)).
您只在注释部分注意到这一点,因为您在那里发现了长行文本。您必须阅读您尝试解析的文件格式的文档。
The focus is more broad. It is to understand what is this ^M
character, if it is related to newlines, if it is related to Python or
just a vobject construct. If it is the latter, and ^M has no general
meaning, why it´s signaled in blue by the vi editor?
它根据您的语法着色方案将 ^M
标记为蓝色。
要找到真正问题的答案(什么是 ^M
),请查看 What does ^M character mean in Vim?
documentation for vim 包含其他二合字母及其含义的列表。
what is the difference with $ in vi and weather these two
characters have any special meaning in python.
$
在正则表达式中使用时始终表示行尾。就其本身而言,$
在 Python 中没有特殊含义,除非用作正则表达式的一部分 - 它与 vim.[=18= 中的含义相同]
我正在处理一个文本文件(包含电子名片),需要删除每行末尾的 ^M(保留换行符),但 NOTES 字段除外(因为 ^M 似乎表示该行继续并环绕)。请参阅从文件的 vi 编辑器中截取的附图,其中换行符由 vi 自动显示为蓝色...
如果我用with语句读取文件的行(处理后写入),我应该如何处理每一行?
更广泛地说,Python 中的 ^M、$ 和 \n(换行符)有什么区别?各自的作用是什么?
请注意,我的问题的重点与以下内容完全无关:
当然,我可以通过输入 s/\n // 或使用 re 或什至使用序列化或什至使用 vobject 中的 sortedChildren 方法来删除 vi 中 NOTES 字段中的奇怪行为。但这不是我提问的重点。
关注面更广。这是为了了解这个 ^M 字符是什么,它是否与换行符有关,是否与 Python 或只是一个 vobject 构造有关。如果是后者,并且 ^M 没有一般含义,为什么 vi 编辑器将其标记为蓝色?我觉得有点奇怪的是,在 vi 中,这些带有 ^M 的换行符后跟一个回车符 return 和一个空白 space 就好像“^M$”是一个特殊的序列来表示 "unintentional line break"... 同样,这三个字符序列是 vobjects 特有的,更通用还是只是我想象的一部分(在这三种情况中的任何一种情况下,为什么 vi 上的蓝色)。
我在当前问题中试图理解的是,为什么 vi 将 ^M 标记为蓝色,$ 在 vi 中有什么区别,天气这两个字符在 python 中有什么特殊含义。因为我注意到 vi 在与 "NOTES" 字段相关的 returns 中设置了 ^M,它似乎具有固定长度(不管 return 在 NOTES 上中断),我正在尝试明白为什么,我还没有找到任何解释。
Individual lines within vCard are delimited by […] a CRLF sequence (U+000D followed by U+000A).
[…]
Long logical lines of text can be split into a multiple-physical-line representation […] by inserting a CRLF immediately followed by a single white space character (space (U+0020) or horizontal tab (U+0009)).
您只在注释部分注意到这一点,因为您在那里发现了长行文本。您必须阅读您尝试解析的文件格式的文档。
The focus is more broad. It is to understand what is this ^M character, if it is related to newlines, if it is related to Python or just a vobject construct. If it is the latter, and ^M has no general meaning, why it´s signaled in blue by the vi editor?
它根据您的语法着色方案将 ^M
标记为蓝色。
要找到真正问题的答案(什么是 ^M
),请查看 What does ^M character mean in Vim?
documentation for vim 包含其他二合字母及其含义的列表。
what is the difference with $ in vi and weather these two characters have any special meaning in python.
$
在正则表达式中使用时始终表示行尾。就其本身而言,$
在 Python 中没有特殊含义,除非用作正则表达式的一部分 - 它与 vim.[=18= 中的含义相同]