基于"Split a string by spaces in Python",它使用 shlex.split 巧妙地用引号拆分字符串,我很想听听非显而易见的标准库函数解决的其他常见任务。
如果这变成Module of The Week,那也没关系。
答案 0 :(得分:6)
我很惊讶地发现你可以使用bisect模块在序列中进行非常快速的二进制搜索。它的文档没有说明任何内容:
此模块支持按排序顺序维护列表,而无需在每次插入后对列表进行排序。
用法非常简单:
>>> import bisect
>>> lst = [4, 7, 10, 23, 25, 100, 103, 201, 333]
>>> bisect.bisect_left(lst, 23)
3
你必须记住,在列表中线性查找某些东西比逐项查找更快,而不是对列表进行排序,然后对其进行二进制搜索。第一个选项是O(n),第二个选项是O(nlogn)。
答案 1 :(得分:4)
Oft忽略了模块,用途和技巧:
collections.defaultdict():用于在dict中缺少键时具有默认值。
functools.wraps():用于编写与内省完美匹配的装饰器。
posixpath:POSIX系统的os.path模块。即使在Windows和其他非POSIX系统上,您也可以使用它来操作POSIX路径(包括URI元素)。
ntpath:Windows的os.path模块;可用于在非Windows系统上处理Windows路径。
(另外:macpath,对于MacOS 9及更早版本,os2emxpath用于OS / 2 EMX,但我不确定是否还有人关心。)
pprint:更加结构化的容器repr()打印使调试变得更加容易。
imp:编写自己的插件系统或从任意档案制作Python导入模块所需的所有工具。
rlcompleter:在普通的交互式解释器中获取制表符。只需要“导入readline,rlcompleter; readline.parse_and_bind('tab:complete')”
PYTHONSTARTUP环境变量:可以设置为进入交互式解释器时将在(在主命名空间中)执行的文件的路径;像上面的rlcompleter配方一样有用。
答案 2 :(得分:3)
我使用itertools(特别是循环,重复,链)使python的行为更像R和其他功能/矢量应用程序。通常这可以让我避免Numpy的开销和复杂化。
# in R, shorter iterables are automatically cycled
# and all functions "apply" in a "map"-like way over lists
> 0:10 + 0:2
[1] 0 2 4 3 5 7 6 8 10 9 11
的Python #Normal python 在[1]中:范围(10)+范围(3) 出[1]:[0,1,2,3,4,5,6,7,8,9,0,1,2]
## this code is terrible, but it demos the idea.
from itertools import cycle
def addR(L1,L2):
n = max( len(L1), len(L2))
out = [None,]*n
gen1,gen2 = cycle(L1), cycle(L2)
ii = 0
while ii < n:
out[ii] = gen1.next() + gen2.next()
ii += 1
return out
In [21]: addR(range(10), range(3))
Out[21]: [0, 2, 4, 3, 5, 7, 6, 8, 10, 9]
答案 3 :(得分:2)
在我得知它之后,我发现struct.unpack是一个解包二进制数据格式的天赐之物!
答案 4 :(得分:2)
getpass对于确定当前用户的登录名非常有用。
grp允许您按名称查找Unix组ID,反之亦然。
在您反复轮询目录内容的情况下,dircache可能很有用。
glob可以找到与Unix shell相匹配的通配符的文件名。
当您需要复制,删除或重命名文件时,shutil非常有用。
csv可以简化分隔文本文件的解析。
optparse提供了一种解析命令行选项的可靠方法。
当您需要操作bzip2压缩文件时,bz2会派上用场。
urlparse将为您节省将URL拆分为组件部分的麻烦。
答案 5 :(得分:1)
我发现sched module对cron类活动很有帮助。它简化了很多事情。不幸的是我发现它太晚了。
答案 6 :(得分:1)
大多数其他示例仅仅被忽略,而不是模块的意外用途。
像shlex一样,fnmatch可以以意想不到的方式应用。 fnmatch是一种穷人的RE,可以用于匹配文件以上,它可以将字符串与简化的通配符模式进行比较。答案 7 :(得分:1)
我开始欣赏的一个功能是string.translate。它的功能非常快,并且在您想要更改或删除字符串中的字符的任何地方都很有用。我只是在一个看似不适用的problem中使用它,并发现它轻松地击败了所有其他解决方案。
缺点是它的API有点笨重,但这在Py2.6 / Py3.0中有所改进。
答案 8 :(得分:1)
pickle模块非常棒
答案 9 :(得分:1)
复数。 (complexobject.c定义了一个类,所以从技术上讲它不是一个模块)。非常适合2D坐标,易于翻译/旋转等
例如
TURN_LEFT_90= 1j
TURN_RIGHT_90= -1j
coord= 5+4j # x=5 y=4
print coord*TURN_LEFT_90