我一直在尝试使用SequenceMatcher创建嵌套或递归效果.
最终目标是比较两个序列,两个序列都可能包含不同类型的实例.
例如,序列可以是:
l1 = [1, "Foo", "Bar", 3]
l2 = [1, "Fo", "Bak", 2]
Run Code Online (Sandbox Code Playgroud)
通常,SequenceMatcher仅将[1]识别为l1和l2的公共子序列.
我想SequnceMatcher被两次字符串实例应用,以便"Foo"和"Fo"作为将被视为相等,以及"Bar"和"Bak",与最长公共子序列将是长度为3的[1, Foo/Fo, Bar/Bak].也就是说,在比较字符串成员时,我希望SequenceMatcher 更宽容.
我尝试做的是为内置的str类编写一个包装器:
from difflib import SequenceMatcher
class myString:
def __init__(self, string):
self.string = string
def __hash__(self):
return hash(self.string)
def __eq__(self, other):
return SequenceMatcher(a=self.string, b=self.string).ratio() > 0.5
Run Code Online (Sandbox Code Playgroud)
编辑:也许更优雅的方式是:
class myString(str):
def __eq__(self, other):
return SequenceMatcher(a=self, b=other).ratio() > 0.5
Run Code Online (Sandbox Code Playgroud)
通过这样做,可以实现以下目标:
>>> Foo = myString("Foo")
>>> Fo = myString("Fo")
>>> …Run Code Online (Sandbox Code Playgroud) 想象一下,我有这样的测试:
import unittest
class MyTests(unittest.TestCase):
print("Starting")
def test_first(self):
.....
Run Code Online (Sandbox Code Playgroud)
该print语句是否保证test_first()在其余部分之前执行?从我所看到的,它确实首先被执行,但是有没有边缘情况?
我有一个我需要处理的HTML文档.我正在使用'beautifoulsoup'.现在我想从该文档中检索一些"subsoups"并将它们加入一个汤中,以便稍后我可以将它用作期望汤对象的函数的参数.
如果不清楚,我会给你一个例子......
from bs4 import BeautifulSoup
my_document = """
<html>
<body>
<h1>Some Heading</h1>
<div id="first">
<p>A paragraph.</p>
<a href="another_doc.html">A link</a>
<p>A paragraph.</p>
</div>
<div id="second">
<p>A paragraph.</p>
<p>A paragraph.</p>
</div>
<div id="third">
<p>A paragraph.</p>
<a href="another_doc.html">A link</a>
<a href="yet_another_doc.html">A link</a>
</div>
<p id="loner">A paragraph.</p>
</body>
</html>
"""
soup = BeautifulSoup(my_document)
# find the needed parts
first = soup.find("div", {"id": "first"})
third = soup.find("div", {"id": "third"})
loner = soup.find("p", {"id": "loner"})
subsoups = [first, third, loner]
# create a new (sub)soup …Run Code Online (Sandbox Code Playgroud) 我正在构建一个同时使用 NLTK 和 Spacy 的应用程序,并通过 Poetry 管理依赖项。我可以通过将此行添加到我的pyproject.toml下面来下载 Spacy 数据[tool.poetry.dependencies]
en_core_web_sm = { url = "https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.2.5/en_core_web_sm-2.2.5.tar.gz" }
Run Code Online (Sandbox Code Playgroud)
是否可以对 NLTK 数据执行类似的操作?我宁愿将其全部指定在一个地方,而不是将其作为某些安装脚本的一部分下载
我发现有些服务器以 HTTP 405 响应请求HEAD(或另一个状态代码,包括 404,这在 IMO 中令人困惑,但这现在并不重要),即使GET请求以 HTTP 200 响应。HTTP 405定义为...
405 不允许的方法
Request-URI 标识的资源不允许使用 Request-Line 中指定的方法。响应必须包含一个允许标头,其中包含所请求资源的有效方法列表。
好吧,我查看了Allow标题,发现我可以用来GET获取资源(尽管我只想知道资源是否存在)。问题解决了。
但是,我的问题是......为什么服务器会不允许该HEAD方法?优点是什么?是否有可能的安全原因?
代码组中有一个kata,其任务是编写一个函数,该函数在输入中获取整数并输出货币格式的字符串.例如123456- > "123,456".
我有一个解决方案,但它比这个字符串格式更丑:
def to_currency(price):
return '{:,}'.format(price)
Run Code Online (Sandbox Code Playgroud)
我已经阅读了文档,但我仍然不知道这是如何工作的?
我正在尝试为我的Django应用程序编写测试,我需要多次检查2个列表是否具有相同的对象(即A中的每个对象也在B中,反之亦然).
我读了assertLists/Sequence/Equal等但是对于我看到的如果列表具有相同的对象但是以不同的顺序(A = [a,b,c], B = [b,c,a])然后它返回一个错误,我不希望它是一个错误,因为它们都有相同的对象.
有没有办法在不循环列表的情况下检查这个?
Django文档说,我们可以在压缩迁移后删除它们:
您应该进行此迁移,但将旧迁移保留在原位置;新的迁移将用于新安装。一旦确定代码库的所有实例都应用了压缩的迁移,就可以删除它们。
在这里,删除是否意味着仅删除迁移文件或django_migrations表中的条目?
这里是一些背景:我只有开发机器,所以只有一个代码库。压缩一些已经应用的迁移后,我删除了文件和数据库条目。通过进行迁移测试是否可以,它没有找到任何东西。因此,一切看起来都不错。第二天,我不得不进行一些更改,并进行了迁移。当我尝试迁移时,它也尝试应用压缩的迁移(在压缩之前已部分应用)。因此,我不得不返回并在django_migrations表中重新创建条目。因此,似乎我不得不保留数据库条目。我试图确保在再次弄乱任何东西之前,先弄清楚为什么它看起来不错,然后再尝试应用压缩后的迁移。
对于Python 2.7:
list1 = [1, 2]
self.assertIn(1, list1)
self.assertIn(2, list1)
Run Code Online (Sandbox Code Playgroud)
有没有办法让我更轻松?就像是:
self.assertIn((1,2), list1) # I know this is wrong, just an example
Run Code Online (Sandbox Code Playgroud) python ×6
django ×2
unit-testing ×2
command-line ×1
difflib ×1
html ×1
html-parsing ×1
http ×1
http-head ×1
linux ×1
migration ×1
nltk ×1
python-2.7 ×1
squash ×1
string ×1
webserver ×1