在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中,我们可以"dir"一个模块,如下所示:
>>> import re
>>> dir(re)
Run Code Online (Sandbox Code Playgroud)
它列出了模块中的所有功能.在Ruby中有类似的方法吗?
我正在用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)
这样的作品,但由于p1的stdin不被重定向,我在终端类型的东西喂管.当我输入^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) 我试图用前导零和尾随零来表示一个数字,以便总宽度为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程序可以使用一系列不同的选项(或子命令)启动,如:
$ 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包)具有我正在寻找的相同的功能
我发现以下行为至少很奇怪:
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)
return在finally子句中使用时,异常消失.那是一个错误吗?有记录吗?
但真正的问题(以及我将标记为正确的答案)是:
python开发人员允许这种奇怪行为的理由是什么?
我需要能够得到一个字符串:
'''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模块.
任何人都可以帮我解决这个问题..
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) 我正在使用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修订31e2fae4adbf1b2af1726e5668a3414cf46b454f的http://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) 我一直试图用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并因某些原因而截断其大小.