小编nos*_*klo的帖子

在Python中初始化词典的最佳方法是什么?

在Perl很多次,我会做这样的事情:

$myhash{foo}{bar}{baz} = 1
Run Code Online (Sandbox Code Playgroud)

我怎么把它翻译成Python?到目前为止,我有:

if not 'foo' in myhash:
    myhash['foo'] = {}
if not 'bar' in myhash['foo']:
    myhash['foo']['bar'] = {}
myhash['foo']['bar']['baz'] = 1
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

python autovivification

79
推荐指数
3
解决办法
7万
查看次数

Ruby相当于Python的"dir"?

在Python中,我们可以"dir"一个模块,如下所示:

>>> import re
>>> dir(re)
Run Code Online (Sandbox Code Playgroud)

它列出了模块中的所有功能.在Ruby中有类似的方法吗?

ruby python inspection

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

blocks - 将输入发送到python子进程管道

我正在用python测试子进程管道.我知道我可以直接在python中执行下面的程序,但这不是重点.我只是想测试管道,所以我知道如何使用它.

我的系统是Linux Ubuntu 9.04,默认为python 2.6.

我从这个文档示例开始.

from subprocess import Popen, PIPE
p1 = Popen(["grep", "-v", "not"], stdout=PIPE)
p2 = Popen(["cut", "-c", "1-10"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
print output
Run Code Online (Sandbox Code Playgroud)

这样的作品,但由于p1stdin不被重定向,我在终端类型的东西喂管.当我输入^D关闭stdin时,我得到了我想要的输出.

但是,我想使用python字符串变量将数据发送到管道.首先我尝试写stdin:

p1 = Popen(["grep", "-v", "not"], stdin=PIPE, stdout=PIPE)
p2 = Popen(["cut", "-c", "1-10"], stdin=p1.stdout, stdout=PIPE)
p1.stdin.write('test\n')
output = p2.communicate()[0] # blocks forever here
Run Code Online (Sandbox Code Playgroud)

没工作.我尝试p2.stdout.read()在最后一行使用,但它也阻止.我补充说p1.stdin.flush(),p1.stdin.close()但它也没有用.我然后我开始沟通:

p1 = Popen(["grep", "-v", "not"], stdin=PIPE, stdout=PIPE)
p2 = Popen(["cut", "-c", "1-10"], …
Run Code Online (Sandbox Code Playgroud)

python subprocess ipc pipe blocking

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

如何使用字符串格式显示BOTH前导零和3的精度?

我试图用前导零和尾随零来表示一个数字,以便总宽度为7,包括小数点.例如,我想将"5"表示为"005.000".似乎字符串格式化将让我做一个或另一个但不是两个.这是我在Ipython中得到的输出,说明了我的问题:

In [1]: '%.3f'%5
Out[1]: '5.000'

In [2]: '%03.f'%5
Out[2]: '005'

In [3]: '%03.3f'%5
Out[3]: '5.000'
Run Code Online (Sandbox Code Playgroud)

第1行和第2行完全符合我的预期.第3行只是忽略了我想要前导零的事实.有任何想法吗?谢谢!

python string-formatting

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

使用自定义命令完成行

我的Python程序可以使用一系列不同的选项(或子命令)启动,如:

$ myProgram doSomething
$ myProgram doSomethingElse
$ myProgram nowDoSomethingDifferent
Run Code Online (Sandbox Code Playgroud)

我希望它使用自动完成,这样如果我输入"myProgram d"它返回"myProgram doSomething",如果我输入"myProgram n"它会呈现"myProgram nowDoSomethingDifferent".这与模块rlcompleter的平均使用类似,但它不从文件系统(或从历史记录)中选择可能的完成选项,而是从一组自定义字符串(对应于我的程序的可用选项)中选择

有关如何实现这一点的任何想法?

我知道变量PYTHONSTARTUP(它应该指向一个我不知道如何写的文件).

作为一个工作示例,django-admin(来自django包)具有我正在寻找的相同的功能

unix bash customization autocomplete

27
推荐指数
4
解决办法
1万
查看次数

回来吃异常

我发现以下行为至少很奇怪:

def errors():
    try:
        ErrorErrorError
    finally:
        return 10

print errors()
# prints: 10
# It should raise: NameError: name 'ErrorErrorError' is not defined
Run Code Online (Sandbox Code Playgroud)

returnfinally子句中使用时,异常消失.那是一个错误吗?有记录吗?

但真正的问题(以及我将标记为正确的答案)是:
python开发人员允许这种奇怪行为的理由是什么?

python return exception finally

26
推荐指数
3
解决办法
3025
查看次数

如何将逗号分隔的字符串解析为列表(警告)?

我需要能够得到一个字符串:

'''foo, bar, "one, two", three four'''
Run Code Online (Sandbox Code Playgroud)

成:

['foo', 'bar', 'one, two', 'three four']
Run Code Online (Sandbox Code Playgroud)

我有一种感觉(来自#python的提示)该解决方案将涉及shlex模块.

python quotes split escaping

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

AttributeError:'module'对象没有属性'model'

任何人都可以帮我解决这个问题..

from django.db import models

# Create your models here.
class Poll(models.model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

运行:

c:\projects\mysite>python manage.py sql polls
Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "C:\Python25\Lib\site-packages\django\core\management\__init__.py", line 340, in execute_manager
    utility.execute()
  File "C:\Python25\Lib\site-packages\django\core\management\__init__.py", line 295, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python25\Lib\site-packages\django\core\management\base.py", line 195, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "C:\Python25\Lib\site-packages\django\core\management\base.py", line 221, in execute
    self.validate()
  File "C:\Python25\Lib\site-packages\django\core\management\base.py", line 249, …
Run Code Online (Sandbox Code Playgroud)

python django

21
推荐指数
3
解决办法
9万
查看次数

在linux上使用pyodbc在nvarchar mssql字段中插入unicode或utf-8字符

我正在使用Ubuntu 9.04

我安装了以下软件包版本:

unixodbc and unixodbc-dev: 2.2.11-16build3
tdsodbc: 0.82-4
libsybdb5: 0.82-4
freetds-common and freetds-dev: 0.82-4
Run Code Online (Sandbox Code Playgroud)

我这样配置/etc/unixodbc.ini:

[FreeTDS]
Description             = TDS driver (Sybase/MS SQL)
Driver          = /usr/lib/odbc/libtdsodbc.so
Setup           = /usr/lib/odbc/libtdsS.so
CPTimeout               = 
CPReuse         = 
UsageCount              = 2
Run Code Online (Sandbox Code Playgroud)

我这样配置/etc/freetds/freetds.conf:

[global]
    tds version = 8.0
    client charset = UTF-8
Run Code Online (Sandbox Code Playgroud)

我已经抓住pyodbc修订31e2fae4adbf1b2af1726e5668a3414cf46b454fhttp://github.com/mkleehammer/pyodbc,并使用安装了" python setup.py install"

我在我的本地网络上安装了一台安装了Microsoft SQL Server 2000的Windows机器,然后侦听本地IP地址10.32.42.69.我有一个名为"Common"的空数据库.我有用户"sa"密码"秘密"与完全权限.

我使用以下python代码来设置连接:

import pyodbc
odbcstring = "SERVER=10.32.42.69;UID=sa;PWD=secret;DATABASE=Common;DRIVER=FreeTDS"
con = pyodbc.connect(s)
cur = con.cursor()
cur.execute('''
CREATE …
Run Code Online (Sandbox Code Playgroud)

python sql-server unicode utf-8 pyodbc

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

使用py2exe在.exe中嵌入图标,在Vista中可见?

我一直试图用py2exe将一个图标(.ico)嵌入到我的"compyled".exe中.

Py2Exe确实有一种嵌入图标的方法:

windows=[{
    'script':'MyScript.py',
    'icon_resources':[(1,'MyIcon.ico')]
}]
Run Code Online (Sandbox Code Playgroud)

这就是我正在使用的.该图标在Windows XP或更低版本上显示正常,但在Vista上根本不显示.我想这是因为新的Vista图标格式,可以是PNG格式,最高可达256x256像素.

那么,如何让py2exe将它们嵌入到我的可执行文件中,而不会破坏Windows XP上的图标?

我很酷,使用外部实用程序而不是py2exe - 我已经尝试使用此命令行实用程序来嵌入它,但它总是会破坏我的exe并因某些原因而截断其大小.

python embed icons py2exe windows-vista

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