字符串分割线(unicode?)
String split lines (unicode?)
问题
下面显示的字符串之间有什么区别?我怎样才能按预期拆分和重新加入它们?
最终目标
我尝试从诗节中提取诗句。一些文字,例如"one\ntwo\nthree" 应在末尾打印为
1 one
2 two
3 three
在幕后,我需要此处显示的每一行以进行进一步操作 - 没有前面的数字。
状态
输出实验对比
我想知道为什么下面内部创建的字符串(参见“但是...”)表现得像预期的那样,而下面“原始文本实验”中显示的文本却没有。
learn_drama$ python3 cli.py --print_input --text_input "one\ntwo\nthree"
-- Raw text experiment --
one\ntwo\nthree
<class 'str'>
['one\ntwo\nthree']
-- End raw text experiment--
-- However... --
one\ntwo\nthree
<class 'str'>
['one', 'two', 'three']
Code/Example
learn_drama$ cat cli.py
"""Console script"""
import sys
import click
@click.command()
@click.option("--text_input", help="Type in some text.", default="No text")
@click.option("--print_input/--no-print_input", help="Prints text input on console.", default=False)
def main(text_input, print_input):
"""Console script"""
if print_input:
click.echo("-- Raw text experiment --")
click.echo(text_input)
click.echo(type(text_input))
click.echo(str.splitlines(text_input))
if text_input == "":
click.echo("No input given")
click.echo("-- End raw text experiment--")
click.echo("-- However... --")
comparison_string = "one\ntwo\nthree"
click.echo(text_input)
click.echo(type(comparison_string))
click.echo(str.splitlines(comparison_string))
return 0
if __name__ == "__main__":
sys.exit(main()) # pragma: no cover
为什么是 unicode?在问题标题中?
在搜索一些提示时,我经常偶然发现与编码相关的问题和答案。我记得在这期间我以某种方式得到了 'unicode' for type(some_value_in_between)
.
您从命令行收到的文本包含两个文字字符 \
和 n
。代码中的 Python 字符串包含编码为 \n
但代表一个字符(也称为 LF、'\u000a'
等)的文字换行符。
更详细一些,
python -c 'from sys import argv; [print(x) for x in argv[1]]' "foo\nbar\nbaz"
在命令行会显示输入的文本包含字符f
、o
、o
、\
、n
、b
等
python -c 'for x in "foo\nbar\nbaz": print(x)'
类似地在 o
和 b
之间显示一个 文字 换行符,等等
换句话说,\n
在 Python 源代码中的字符串中 表示一个换行符(“原始”字符串除外 r'\n'
其中反斜杠始终只是文字反斜杠)但在其他地方,\n
只是两个可打印的 ASCII 字符 \
和 n
.
这是一个常见的常见问题解答。
问题
下面显示的字符串之间有什么区别?我怎样才能按预期拆分和重新加入它们?
最终目标
我尝试从诗节中提取诗句。一些文字,例如"one\ntwo\nthree" 应在末尾打印为
1 one
2 two
3 three
在幕后,我需要此处显示的每一行以进行进一步操作 - 没有前面的数字。
状态
输出实验对比
我想知道为什么下面内部创建的字符串(参见“但是...”)表现得像预期的那样,而下面“原始文本实验”中显示的文本却没有。
learn_drama$ python3 cli.py --print_input --text_input "one\ntwo\nthree"
-- Raw text experiment --
one\ntwo\nthree
<class 'str'>
['one\ntwo\nthree']
-- End raw text experiment--
-- However... --
one\ntwo\nthree
<class 'str'>
['one', 'two', 'three']
Code/Example
learn_drama$ cat cli.py
"""Console script"""
import sys
import click
@click.command()
@click.option("--text_input", help="Type in some text.", default="No text")
@click.option("--print_input/--no-print_input", help="Prints text input on console.", default=False)
def main(text_input, print_input):
"""Console script"""
if print_input:
click.echo("-- Raw text experiment --")
click.echo(text_input)
click.echo(type(text_input))
click.echo(str.splitlines(text_input))
if text_input == "":
click.echo("No input given")
click.echo("-- End raw text experiment--")
click.echo("-- However... --")
comparison_string = "one\ntwo\nthree"
click.echo(text_input)
click.echo(type(comparison_string))
click.echo(str.splitlines(comparison_string))
return 0
if __name__ == "__main__":
sys.exit(main()) # pragma: no cover
为什么是 unicode?在问题标题中?
在搜索一些提示时,我经常偶然发现与编码相关的问题和答案。我记得在这期间我以某种方式得到了 'unicode' for type(some_value_in_between)
.
您从命令行收到的文本包含两个文字字符 \
和 n
。代码中的 Python 字符串包含编码为 \n
但代表一个字符(也称为 LF、'\u000a'
等)的文字换行符。
更详细一些,
python -c 'from sys import argv; [print(x) for x in argv[1]]' "foo\nbar\nbaz"
在命令行会显示输入的文本包含字符f
、o
、o
、\
、n
、b
等
python -c 'for x in "foo\nbar\nbaz": print(x)'
类似地在 o
和 b
之间显示一个 文字 换行符,等等
换句话说,\n
在 Python 源代码中的字符串中 表示一个换行符(“原始”字符串除外 r'\n'
其中反斜杠始终只是文字反斜杠)但在其他地方,\n
只是两个可打印的 ASCII 字符 \
和 n
.
这是一个常见的常见问题解答。