小编Ada*_*ith的帖子

递归单元测试发现

我有一个包含目录"tests"的包,我正在存储我的单元测试.我的包看起来像:

.
??? LICENSE
??? models
?   ??? __init__.py
??? README.md
??? requirements.txt
??? tc.py
??? tests
?   ??? db
?   ?   ??? test_employee.py
?   ??? test_tc.py
??? todo.txt
Run Code Online (Sandbox Code Playgroud)

从我的包目录,我希望能够找到tests/test_tc.pytests/db/test_employee.py.我不想安装第三方库(nose或其他),或者必须手动构建一个TestSuite以运行它.

当然有一种方法可以告诉unittest discover他们一旦发现测试就不要停止寻找?python -m unittest discover -s tests会发现tests/test_tc.pypython -m unittest discover -s tests/db会找到tests/db/test_employee.py.有没有找到两者的方法?

python python-2.7 python-unittest

29
推荐指数
2
解决办法
1万
查看次数

迭代OrderedDict python

我有以下OrderedDict:

OrderedDict([('r', 1), ('s', 1), ('a', 1), ('n', 1), ('y', 1)])
Run Code Online (Sandbox Code Playgroud)

这实际上表示单词中字母的频率.

在第一步 - 我将采用最后两个元素来创建这样的联合元组;

 pair1 = list.popitem()
    pair2 = list.popitem()
    merge_list = (pair1[0],pair2[0])
    new_pair = {}
    new_pair[merge_list] = str(pair1[1] + pair2[1])
    list.update(new_pair);
Run Code Online (Sandbox Code Playgroud)

这为我创建了以下OrderedList:

OrderedDict([('r', 1), ('s', 1), ('a', 1), (('y', 'n'), '2')])
Run Code Online (Sandbox Code Playgroud)

我现在想迭代元素,每次取最后三个元素并根据值的较低总和决定什么是union对象.

例如,上面的列表将转向;

OrderedDict([('r', 1), (('s', 'a'), '2'), (('y', 'n'), '2')])
Run Code Online (Sandbox Code Playgroud)

但以上是:

OrderedDict([ ('r', 1), ('s', 2), ('a', 1), (('y', 'n'), '2')])
Run Code Online (Sandbox Code Playgroud)

结果将是:

OrderedDict([('r', 1), ('s', 2), (('a','y', 'n'), '3')])
Run Code Online (Sandbox Code Playgroud)

因为我希望左边的那些值更小

我试图自己做,但不明白如何在OrderedDict上从头到尾迭代.

我该怎么做?

EDITED 回答评论:

我在一个句子中得到一个字母频率字典:

{ 's':1, …
Run Code Online (Sandbox Code Playgroud)

python-3.3

28
推荐指数
4
解决办法
5万
查看次数

isinstance(foo,bar)vs type(foo)是bar

真的是一个语义问题.

直到最近,如果我不得不对结构进行任何类型检查,我会使用type(obj) is listet.人.然而,自从加入SO后,我注意到每个人(我的意思是每个人)都使用了isinstance(obj,list).它们似乎是同义词,并且timeit在它们之间显示出几乎相同的速度.

def a(): return type(list()) is list
def b(): return isinstance(list(),list)

from timeit import timeit
timeit(a)
# 0.5239454597495582
timeit(b)
# 0.5021292075273176
Run Code Online (Sandbox Code Playgroud)

事实上甚至dis同意他们是同义词,除了type is'sCOMPARE_OP

from dis import dis

dis(a)
# 2           0 LOAD_GLOBAL              0 (type) 
#             3 LOAD_GLOBAL              1 (list) 
#             6 CALL_FUNCTION            0 (0 positional, 0 keyword pair) 
#             9 CALL_FUNCTION            1 (1 positional, 0 keyword pair) 
#            12 LOAD_GLOBAL              1 (list) 
#            15 …
Run Code Online (Sandbox Code Playgroud)

python typechecking

25
推荐指数
3
解决办法
1万
查看次数

从Python访问errno?

我遇到了一个相当复杂的Python模块,它不会返回有用的错误代码(它实际上无法安静地失败).但是,它调用的底层C库设置了errno.

通常errno来自OSError属性,但由于我没有异常,我无法得到它.

使用ctypes,libc.errno不起作用,因为errno是GNU libc中的一个宏.Python 2.6有一些功能,但Debian仍然使用Python 2.5.将C模块插入我的纯Python程序只是为了阅读errno令我感到厌恶.

有没有办法访问errno?只有Linux的解决方案很好,因为被包装的库是仅限Linux的.我也不必担心线程,因为我在运行失败的时候只运行一个线程.

python linux errno python-2.5

22
推荐指数
4
解决办法
8985
查看次数

Python 2 - 你如何向上/向下舍入到最近的6分钟?

有很多人围绕到最近的十分钟的例子,但我无法弄清楚四舍五入到最接近的六分之一的逻辑.我认为这将是一个转换几个数字的问题,但我不能让它工作.

我正在使用的代码位于我的Github.我得到的块甚至没有接近工作(不会给出任何输出)是:

def companyTimer():
    if minutes % 6 > .5:
        companyMinutes = minutes + 1
    elif minutes % 6 < 5:
        companyMinutes = minutes - 1
    else:
        companyMinutes = minutes
    print companyMinutes
Run Code Online (Sandbox Code Playgroud)

现在看一下,我看到我的逻辑是不正确的 - 即使它正在工作,代码的加1和减1分是没有意义的.

无论如何,我不知道如何解决这个问题 - 有人能指出我正确的方向吗?

PS - 这是我在工作中为个人使用而制作的东西..不要求我的工作帮助,但这将帮助我跟踪我的工作时间.不希望有任何问题.

谢谢!

python datetime python-2.7

15
推荐指数
1
解决办法
1441
查看次数

在Python 2.6中发送TLS 1.2请求

我被困在使用Python 2.6,我需要使用TLS 1.2发送一个帖子请求.Python 2.6的requests库是否支持TLS 1.2?如何确保/验证请求是通过TLS1.2而不是其他版本进行的?

样本请求是

r=requests.post(url,data=payload,verify=False)
Run Code Online (Sandbox Code Playgroud)

在论坛的某个地方,我开始知道我们需要编译pyOpenSSL来支持这一点.有没有更简单的方法?

python ssl request python-2.6 python-requests

14
推荐指数
1
解决办法
2万
查看次数

替换返回最后一个评估对象的`any`?

我只是写了一些我想做的代码:

def foo(container)
    return any((some_obj.attr <= 0 for some_obj in container))
Run Code Online (Sandbox Code Playgroud)

其中,foo将返回第一个some_obj地方some_obj.attr是零或更低.我想,另一种选择是

def foo(container):
    return next((some_obj for some_obj in container if some_obj.attr <= 0), False)
Run Code Online (Sandbox Code Playgroud)

但这感觉非常hacky.

我最终写出来了,但我不喜欢它有多深入嵌套.

def foo(container):
    for some_obj in container:
        if some_obj.attr <= 0:
            return some_obj
    return False
Run Code Online (Sandbox Code Playgroud)

澄清container一下:在这种情况下,可能不超过6个对象(通常是2个对象),尽管一般情况更有用.我也试图优化阅读的简易性,而不是性能.

有没有比这更好的构造?

python

11
推荐指数
2
解决办法
485
查看次数

获取字典的名称

我发现自己需要迭代一个由字典组成的列表,我需要,每次迭代,我正在迭代的字典的名称.

这是一个MWE(这个例子的内容与这个例子无关):

dict1 = {...}
dicta = {...}
dict666 = {...}

dict_list = [dict1, dicta, dict666]

for dc in dict_list:
    # Insert command that should replace ???
    print 'The name of the dictionary is: ', ???
Run Code Online (Sandbox Code Playgroud)

如果我只是dc在哪里使用???,它将打印字典的全部内容.如何获取正在使用的字典的名称?

python dictionary

8
推荐指数
1
解决办法
2万
查看次数

BeautifulSoup - 抓论坛页面

我正在尝试抓一个论坛讨论并将其导出为csv文件,其中包含"thread title","user"和"post"等行,其中后者是每个人的实际论坛帖子.

我是Python和BeautifulSoup的初学者,所以我很难用这个!

我目前的问题是所有文本在csv文件中每行被拆分为一个字符.那里有谁可以帮助我吗?如果有人能帮我一把,真是太棒了!

这是我一直在使用的代码:

from bs4 import BeautifulSoup
import csv
import urllib2

f = urllib2.urlopen("https://silkroad5v7dywlc.onion.to/index.php?action=printpage;topic=28536.0")

soup = BeautifulSoup(f)

b = soup.get_text().encode("utf-8").strip() #the posts contain non-ascii words, so I had to do this

writer = csv.writer(open('silkroad.csv', 'w'))
writer.writerows(b)
Run Code Online (Sandbox Code Playgroud)

python screen-scraping beautifulsoup

7
推荐指数
1
解决办法
8545
查看次数

元组中的方法需要显式的"self"参数

我想了解为什么这段代码有效:

class MyClass(object):
    def f(self): print "Hello"
    ff = f
    def g(self): self.ff()

MyClass().g()
Run Code Online (Sandbox Code Playgroud)

虽然这不是:

class MyClass(object):
    def f(self): print "Hello"
    ff = f,
    def g(self): self.ff[0]()

MyClass().g()
Run Code Online (Sandbox Code Playgroud)

因为它需要一个参数self.ff[0](self):

TypeError: f() takes exactly 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)

是不是self.ff[0] == self.f像以前那样self.ff == self.f

python

7
推荐指数
1
解决办法
51
查看次数