小编pri*_*stc的帖子

你如何将python中的命令行参数转换为字典?

我正在编写一个带有任意命令行参数的应用程序,然后将它们传递给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具有执行此操作的功能......

python command-line sys argv

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

折叠字符串中的空格

我有一个字符串,看起来像这样:

"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)

唯一不起作用的是空白崩溃.有任何想法吗?

python regex

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

装饰时保留argspec?

可能重复:
如何以编程方式更改python装饰器中函数的argspec?

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,但我不知道如何.

python

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

jinja2模板的多个渲染?

有没有办法用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模板库可以做到这一点?

python jinja2

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

保存模型时替换缺少的字段值

我有这个型号:

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)

django django-forms

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

用PIL剪切字体

此图像是使用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

python fonts text-rendering python-imaging-library

6
推荐指数
1
解决办法
2380
查看次数

将关键字参数传递给类方法装饰器

我有一个类有一个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未被传递的地方有关...

python decorator

6
推荐指数
1
解决办法
1213
查看次数

在不同时间在同一行上打印到屏幕

我的代码看起来像这样:

print "Doing Something...",
do_some_function_that_takes_a_long_time()
print "Done"
Run Code Online (Sandbox Code Playgroud)

我希望它首先在屏幕顶部打印该语句,然后执行该功能,然后打印"完成"行.目前,它一直等到"Done"行执行之后再用它打印顶部.

换句话说,我希望暂停与屏幕上的"做某事......"一起发生.我该如何实现这一目标?

python

6
推荐指数
1
解决办法
757
查看次数

django中的initial_data fixture管理

我正在研究的django项目有大量的initial_data fixture数据.默认情况下,自动加载数据的唯一方法是调用app文件夹中的文件fixtures,并且需要命名文件initial_data.ext(ext为xml或json或yaml等).

我认为这真的很难实现.我宁愿有一个fixtures文件夹,然后在一个initial_data文件夹里面,然后在那里,为该应用程序中的每个模型一个文件.或者那种效果.现在这可以在django做吗?或者可能是其他一些更好的夹具组织方案.

python django fixture

6
推荐指数
2
解决办法
2976
查看次数

你能在页面动作弹出窗口中使用javascript吗?

我正在尝试构建一个使用页面操作弹出功能的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.

javascript google-chrome-extension

6
推荐指数
1
解决办法
647
查看次数