我相信下面的代码
s = '''
...
.o.
...
'''
print(s.splitlines())
应打印
['', '...', '.o.', '...']
事实上,当Python正常执行时就是这种情况(这里是在Wandbox上运行的示例)。
但现实是无情的(像往常一样);Google Colborator打印一个没有“三个点”的结果:
我还用本地安装的Jupyter(Python 3.7.13、Jupyter notebook 6.4.12、IPython 7.34.0)尝试了相同的代码,结果与Google Colaboratory相同。
有人知道是什么导致了三个点的删除吗?
匿名用户
这是IPython功能。如果IPython认为您的输入看起来像是从另一个交互式会话复制粘贴的,那么在执行输入之前,它会去掉它认为是交互式提示的所有内容。
这应该可以轻松地从其他交互式Python会话复制和粘贴代码,而无需手动删除提示,但当您的实际代码看起来像是其中包含交互式提示时,它会导致问题。
与其他答案之一声称的相反,编辑sys.ps2
根本不会影响这一点。提示正则表达式是硬编码的。对于当前的IPython,您可以在IPython.core.inputtransformer2. PromptStripper
中看到逻辑,但Google Colab目前在旧的IPython版本5.5.0上,您应该在其中查看IPython.core.inputtransformer.classic_prompt
:
@CoroutineInputTransformer.wrap
def classic_prompt():
"""Strip the >>>/... prompts of the Python interactive shell."""
# FIXME: non-capturing version (?:...) usable?
prompt_re = re.compile(r'^(>>>|\.\.\.)( |$)')
initial_re = re.compile(r'^>>>( |$)')
# Any %magic/!system is IPython syntax, so we needn't look for >>> prompts
turnoff_re = re.compile(r'^[%!]')
return _strip_prompts(prompt_re, initial_re, turnoff_re)
编辑系统。ps2看起来很有用,因为\u strip_prompts
在前两行中没有找到任何提示时会停止寻找提示,并且需要编辑的额外代码sys。ps2表示在这些行中未找到任何提示。
不幸的是,如果您想禁用此功能,它将比编辑sys更加尴尬。ps2
。我认为没有一个方便的配置选项。我认为您必须检索输入清理转换器列表,并手动删除提示剥离器。在Google Colab目前使用的IPython版本上,如下所示:
physical_line_transforms = get_ipython().input_transformer_manager.physical_line_transforms
physical_line_transforms[:] = [transformer for transformer in physical_line_transforms
if transformer.coro.__name__ != '_strip_prompts']
coro和strip\u提示是未记录的实现细节,但我认为没有更好的方法。
在更现代的IPython上,代码如下所示:
from IPython.core.inputtransformer2 import PromptStripper
cleanup_transformers = get_ipython().input_transformers_cleanup
cleanup_transformers[:] = [transformer for transformer in cleanup_transformers
if not isinstance(transformer, PromptStripper)]
与其他代码片段不同,我认为这里的所有内容都是有文档记录的iPythonAPI的一部分。
Google collab解释<代码>
作为提示的一部分
您可以将提示更改为其他字符串,结果将如您所料:
import sys sys.ps2 = '<<<' # default value is ... s = ''' ... .o. ... ''' print(s.splitlines()) ['', '...', '.o.', '...']
编辑:正如@user2357112在评论和他们的回答中指出的那样,更改提示不会影响这一点。在这里,它似乎有效,因为在单元格的开头添加更多行会使Ipython解释器认为它们不再是提示的一部分。您可以将字符串更改为
'\n...\n. o.\n...'
作为解决方法。
这是我索引中的文档(也可以有几个): 从逻辑上讲,我试图建立这个条件: 我的问题(来自kibana): 我正在与上述范围内的字段的范围查询与上面的其他字段进行比较。但没有得到任何命中!我想检索具有在给定和日期。 在这个领域很缺乏经验,不知道为什么不起作用!请帮助如何修复此查询以做到这一点?
我正在使用Standard ardAnalyser索引10个文本文档。 上面是用来索引文档的代码片段。出于测试目的,我正在搜索一个名为“灰烬”的字段。 当我使用QueryParser时,Lucene给出了预期的搜索结果。 但是,当我使用TermQuery API时,我没有得到所需的结果。我正在展示我为TermQuery所做的代码更改。 对stackoverflow本身做了一些研究,例如Lucene
这是我的示例es索引文档:
我有一个索引,其中我的每个对象都有状态字段,该字段可以有一些预定义的值。我想获取所有状态为“已启动”、“已更新”、“已删除”的查询,任何与这些匹配的,因此我使用Querybuilder和nativeSearchQuery,通过ElasticsearchOperations在控制台上打印的java创建了这个查询: 我的索引中有“INITIATED”状态的数据,但没有得到查询中提到的任何状态的人。请如
我想根据X列重新划分spark dataframe。假设X列有3个不同的值(X1,X2,X3)。不同值的数量可能会变化。 我希望一个分区包含只有1个X值的记录。也就是说,我想要3个分区,其中1有x=x1的记录,其他的有x=x2,最后一个有x=x3的记录。 我正在做的重新划分 但是,我在DF中的分区并没有像预期的那样出现。由于一个分区为空,第二个分区包含X1的记录,第三个分区同时包含X2和X3的记录
当我在本文中使用<code>dplyr::case_when<code>而不是<code>if<code>时,我注意到了下面的这种行为。如果第二个分支的输出是一个显式字符串,它将按预期工作,但如果指定了<code>x</code>本身,结果将发生变化。 为什么只有< code>case_when给出不同的结果? 由reprex软件包(v2.0.1)于2022年8月16日创建