我正在编写一个带有任意命令行参数的应用程序,然后将它们传递给python函数:
$ myscript.py --arg1=1 --arg2=foobar --arg1=4
Run Code Online (Sandbox Code Playgroud)
然后在myscript.py里面:
import sys
argsdict = some_function(sys.argv)
Run Code Online (Sandbox Code Playgroud)
这里argsdict看起来是这样的:
{'arg1': ['1', '4'], 'arg2': 'foobar'}
Run Code Online (Sandbox Code Playgroud)
我确定某个地方有一个图书馆可以做到这一点,但我找不到任何东西.
编辑: argparse/getopt/optparse不是我想要的.这些库用于定义每次调用相同的接口.我需要能够处理任意参数.
除非,argparse/optparse/getopt具有执行此操作的功能......
我有一个字符串,看起来像这样:
"stuff . // : /// more-stuff .. .. ...$%$% stuff -> DD"
Run Code Online (Sandbox Code Playgroud)
我想剥离所有标点符号,使所有内容都大写并折叠所有空格,使其看起来像这样:
"STUFF MORE STUFF STUFF DD"
Run Code Online (Sandbox Code Playgroud)
这可能是一个正则表达式还是我需要组合两个以上?这是我到目前为止:
def normalize(string):
import re
string = string.upper()
rex = re.compile(r'\W')
rex_s = re.compile(r'\s{2,}')
result = rex.sub(' ', string) # this produces a string with tons of whitespace padding
result = rex.sub('', result) # this reduces all those spaces
return result
Run Code Online (Sandbox Code Playgroud)
唯一不起作用的是空白崩溃.有任何想法吗?
argspec是获取函数参数的好方法,但是当函数被装饰时它不起作用:
def dec(func):
@wraps(func)
def wrapper(*a, **k)
return func()
return wrapper
@dec
def f(arg1, arg2, arg3=SOME_VALUE):
return
import inspect
print inspect.argspec(f)
-----------
ArgSpec(args=[], varargs='a', keywords='k', defaults=None)
Run Code Online (Sandbox Code Playgroud)
Argspec应该返回arg1,arg2,arg3.我想我需要定义wrapper不同的不使用*a和**k,但我不知道如何.
有没有办法用jinja2做到这一点?
template = Template("{{ var1 }}{{ var2 }}")
rendered1 = template.render(var1=5) # "5-{{ var2 }}"
rendered2 = Template(rendered1).render(var2=6) # "5-6"
Run Code Online (Sandbox Code Playgroud)
基本上,我希望能够在模板上进行多次传递.当模板引擎在模板中找到不在上下文中的变量时,不要将其替换为空,而是保持模板变量完好无损?如果不是jinja2,有没有其他python模板库可以做到这一点?
我有这个型号:
class Fleet(models.Model):
company = models.ForeignKey("Company", editable=False)
aircraft = models.ForeignKey("Aircraft")
size = models.IntegerField(default=1)
description = models.TextField(blank=True)
def __unicode__(self):
return u"%s" % (self.aircraft, )
Run Code Online (Sandbox Code Playgroud)
然后是基于此模型的表单:
class FleetForm(ModelForm):
class Meta:
model = Fleet
exclude = ('company', )
Run Code Online (Sandbox Code Playgroud)
当我在模板中使用此表单时,不会添加"公司"字段,这是预期的.但该字段必须为空白!=真.
我使用这种形式的方式,公司属性将始终在视图函数中已知,因为它是从URL传递的.在保存之前,如何将公司添加到视图功能中的表单中?
这是我的观点:
def new_fleet(request, company_id):
from forms import FleetForm
company = Company.objects.get(pk=company_id)
if request.method == "POST":
form = FleetForm(request.POST,)
form.company = company #doesn't work
form = form.save(commit=False) #can't do this because the form
form.company = company #doesn't validate (company is not set)
if not …Run Code Online (Sandbox Code Playgroud) 此图像是使用PIL创建的.看看这张图片中的g和y是如何被截断的?我怎么能阻止这个?
http://img109.imageshack.us/img109/8874/screenshotep.png
创建此图像的代码非常简单(缩写):
import Image, ImageDraw, ImageFont
im = Image.new("RGBA", (200, 200), 'white')
draw = ImageDraw.Draw(im)
font = ImageFont.truetype("VeraSe.ttf", 12)
draw.text(
(1, 1),
" %s: " % "ggjyfFwe__",
font=font,
fill='black'
)
draw.text(
(1, 30),
" %s" % 15,
font=font,
fill='black'
)
im.show()
Run Code Online (Sandbox Code Playgroud)
我尝试使用几种不同的字体,它总是被剪裁.令人惊讶; y,googleing"PIL字体剪辑"返回很少有用的命中...我在Ubuntu 9.10上使用python 2.6.4和PIL 1.1.6
我有一个类有一个output()方法,它返回一个matplotlib图实例.我有一个我写的装饰器,它接受了fig实例并将其转换为Django响应对象.
我的装饰师看起来像这样:
class plot_svg(object):
def __init__(self, view):
self.view = view
def __call__(self, *args, **kwargs):
print args, kwargs
fig = self.view(*args, **kwargs)
canvas=FigureCanvas(fig)
response=HttpResponse(content_type='image/svg+xml')
canvas.print_svg(response)
return response
Run Code Online (Sandbox Code Playgroud)
这就是它的使用方式:
def as_avg(self):
return plot_svg(self.output)()
Run Code Online (Sandbox Code Playgroud)
我这样做而不是使用"@"语法的唯一原因是因为当我使用"@"时:
@plot_svg
def as_svg(self):
return self.output()
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
as_svg() takes exactly 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)
我试图通过将其置于"@"语法来"修复"这个问题,但我无法弄清楚如何让它工作.我认为它与self未被传递的地方有关...
我的代码看起来像这样:
print "Doing Something...",
do_some_function_that_takes_a_long_time()
print "Done"
Run Code Online (Sandbox Code Playgroud)
我希望它首先在屏幕顶部打印该语句,然后执行该功能,然后打印"完成"行.目前,它一直等到"Done"行执行之后再用它打印顶部.
换句话说,我希望暂停与屏幕上的"做某事......"一起发生.我该如何实现这一目标?
我正在研究的django项目有大量的initial_data fixture数据.默认情况下,自动加载数据的唯一方法是调用app文件夹中的文件fixtures,并且需要命名文件initial_data.ext(ext为xml或json或yaml等).
我认为这真的很难实现.我宁愿有一个fixtures文件夹,然后在一个initial_data文件夹里面,然后在那里,为该应用程序中的每个模型一个文件.或者那种效果.现在这可以在django做吗?或者可能是其他一些更好的夹具组织方案.
我正在尝试构建一个使用页面操作弹出功能的chrome扩展,但我的javascript似乎都没有工作.这是来源:
<!DOCTYPE html>
<html>
<body>
<input type="button" id="button1" value="first button">
<input type="button" id="button2" value="second button">
<script>
console.log("do anything!!");
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我无法在任何地方看到记录器声明.我似乎无法运行任何东西.弹出窗口应该如何工作?文档没有提到这些弹出窗口只是静态HTML.
python ×8
django ×2
argv ×1
command-line ×1
decorator ×1
django-forms ×1
fixture ×1
fonts ×1
javascript ×1
jinja2 ×1
regex ×1
sys ×1