小编Bru*_*tus的帖子

如何从JSON获取字符串对象而不是Unicode?

我正在使用Python 2ASCII编码的文本文件中解析JSON .

使用json或 加载这些文件时simplejson,我的所有字符串值都转换为Unicode对象而不是字符串对象.问题是,我必须使用一些只接受字符串对象的库的数据.我不能更改库也不能更新它们.

是否可以获取字符串对象而不是Unicode对象?

>>> import json
>>> original_list = ['a', 'b']
>>> json_list = json.dumps(original_list)
>>> json_list
'["a", "b"]'
>>> new_list = json.loads(json_list)
>>> new_list
[u'a', u'b']  # I want these to be of type `str`, not `unicode`
Run Code Online (Sandbox Code Playgroud)

更新

很久以前,当我遇到Python 2时,问这个问题.今天一个简单而干净的解决方案是使用最新版本的Python - 即Python 3和转发版.

python unicode serialization json python-2.x

272
推荐指数
8
解决办法
30万
查看次数

如何在Python <3中将UTF-8编码的文本打印到控制台?

我正在运行一个最新的Linux系统,我的所有语言环境都是UTF-8:

LANG=de_DE.UTF-8
LANGUAGE=
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
...
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)

现在我想将UTF-8编码的内容写入控制台.

现在Python使用UTF-8进行FS编码,但坚持使用ASCII作为默认编码:-(

>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> sys.getfilesystemencoding()
'UTF-8'
Run Code Online (Sandbox Code Playgroud)

我认为最好(干净)的方法是设置PYTHONIOENCODING环境变量.但似乎Python忽略了它.至少在我的系统上ascii,即使在设置envvar之后,我仍然保持默认编码.

# tried this in ~/.bashrc and ~/.profile (also sourced them)
# and on the commandline before running python
export PYTHONIOENCODING=UTF-8
Run Code Online (Sandbox Code Playgroud)

如果我在脚本开头执行以下操作,它可以工作:

>>> import sys
>>> reload(sys)  # to enable `setdefaultencoding` again
<module 'sys' (built-in)>
>>> sys.setdefaultencoding("UTF-8")
>>> sys.getdefaultencoding()
'UTF-8'
Run Code Online (Sandbox Code Playgroud)

但这种做法似乎不洁净.那么,实现这一目标的好方法是什么?

解决方法

而不是更改默认编码 - 这不是一个好主意(请参阅mesilliac的答案) - 我只是sys.stdoutStreamWriter …

python shell encoding ascii utf-8

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

如何抑制Django中的弃用警告?

每次我使用django-admin命令 - 即使在TAB完成时 - 它会抛出一个RemovedInDjango19Warning(如果我使用test命令,则会抛出更多).我怎样才能压制这些警告?

我正在使用Django 1.8和Python 3.4(在虚拟环境中).据我所知,所有这些警告来自库而不是我的代码.

例子

这里有些例子:

  • …/lib/python3.4/importlib/_bootstrap.py:321: RemovedInDjango19Warning: django.contrib.contenttypes.generic is deprecated and will be removed in Django 1.9. Its contents have been moved to the fields, forms, and admin submodules of django.contrib.contenttypes. return f(*args, **kwds)

  • …/lib/python3.4/site-packages/django/contrib/admin/util.py:7: RemovedInDjango19Warning: The django.contrib.admin.util module has been renamed. Use django.contrib.admin.utils instead. "Use django.contrib.admin.utils instead.", RemovedInDjango19Warning)

  • …/lib/python3.4/site-packages/django/templatetags/future.py:25: RemovedInDjango19Warning: Loading the ``url`` tag from the ``future`` library is deprecated and will be removed in Django 1.9. Use …

python django django-admin

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

如何在Python中处理具有不同参数集(或类型)的构造函数或方法?

有没有在Python的方式,有多个构造函数或多个方法具有相同的名字,谁在不同数量的参数,他们接受或一个或多个参数(S)的类型

如果没有,那么处理这种情况的最佳方法是什么?

举个例子,我组成了一个颜色类.这个类只应作为讨论这个问题的一个基本例子,那里有很多不必要的和/或多余的东西.

如果我可以使用不同的对象(列表,其他颜色对象或三个整数......)调用构造函数并且构造函数相应地处理它们,那将是很好的.在这个基本示例中,它在某些情况下使用*args和**kwargs,但使用类方法是我想出的唯一通用方法.对于这个解决方案,什么是" 最佳实践 "?

抛开构造函数,如果我也想实现一个_ _ add _ _方法,我怎么能让这个方法接受所有这一切:一个普通的整数(添加到所有值),三个整数(其中第一个是添加到红色值等等)或另一个颜色对象(两个红色值加在一起等)?

编辑

  • 我添加了一个替代构造函数(初始化程序,_ _ init _ _),它基本上完成了我想要的所有东西.

  • 但我坚持第一个和工厂方法.看起来更清楚.

  • 我还添加了_ _ add _ _,它完成了上面提到的所有事情,但我不确定它是不是很好的风格.我尝试使用迭代协议并回退到"单值模式",而不是检查特定类型.也许还是丑陋的.

  • 我看了_ _ new _ _,感谢链接.

  • 我第一次尝试使用它失败了:我从*args和**kwargs(它是一个类,一个列表等)中过滤rgb值然后用右args调用超类的_ _ new _ _(只是r, g,b)将它传递给init.对'Super(cls,self)._ _ new _ _(....)'的调用有效,但是因为我生成并返回与我调用的对象相同的对象(按预期),所有原始args传递给_ _ init _ _(按预期工作),所以它保释.

  • 我可以摆脱_ _ init _ _ completly并设置_ _ new _ _中的值但我不知道......感觉我在这里滥用东西;-)我应该好好看看我认为元类和新的第一个.

资源:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

class Color (object):

  # It's strict on what …
Run Code Online (Sandbox Code Playgroud)

python

15
推荐指数
3
解决办法
1232
查看次数

如何在Python中获取两个xml标记之间的全部内容?

我尝试在一个开放的xml标签和它的结束对应物之间获取整个内容.

title以下情况下获取内容很简单,但如果使用混合内容并且我想保留内部标记,如何在标记之间获取整个内容

<?xml version="1.0" encoding="UTF-8"?>
<review>
  <title>Some testing stuff</title>
  <text sometimes="attribute">Some text with <extradata>data</extradata> in it.
  It spans <sometag>multiple lines: <tag>one</tag>, <tag>two</tag> 
  or more</sometag>.</text>
</review>
Run Code Online (Sandbox Code Playgroud)

我想要的是两个text标签之间的内容,包括任何标签:Some text with <extradata>data</extradata> in it. It spans <sometag>multiple lines: <tag>one</tag>, <tag>two</tag> or more</sometag>.

现在我使用正则表达式,但它有点混乱,我不喜欢这种方法.我倾向于基于XML解析器的解决方案.我看了看minidom,etree,lxml并且BeautifulSoup也没有找到这种情况下的解决方案(全部内容,包括内标签).

python xml lxml xml-parsing

13
推荐指数
2
解决办法
8568
查看次数

如何在Gnome中发布Python包的`.desktop`文件和图标(带有distutils或setuptools)?

目前我正在使用自动工具来构建/安装和打包我的项目,但我真的想转向感觉更"pythonic"的东西.

我的项目包括两个脚本,一个模块,两个glade GUI描述和两个.desktop文件.它目前是一个纯粹的python项目,虽然很快就会改变.

看看setuptools,我可以很容易地看到如何处理除.desktop文件之外的所有内容; 他们必须最终进入特定目录,以便Gnome可以找到它们.

使用distuils/setuptools是一个好主意吗?

python packaging gnome setuptools distutils2

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

VIM中的字/代码完成

我知道通过omnifunc 可以通过CTRL+N&CTRL+P和代码完成来完成单词的完成CTRL+X CTRL+O.我另外尝试了Supertab(非常好),因为我已经习惯了TAB完成.这一切都很好.我想在我打字的时候看到可能的匹配,所以我也尝试了autocomplpop.vim,女巫就是这么做的.

我喜欢什么,虽然完成,将是两者一起一点点扭曲的结合:我想看到的建议弹出如下I型(就像使用autocompop),但是当我使用TAB 这个词应该扩大在最大的普通比赛:

foo bar testor booze test baz teter
te<TAB>
Run Code Online (Sandbox Code Playgroud)

输入te第二行后,弹出窗口应该建议test,teter然后testor.

当我按下时TAB,它应该什么也不做,因为没有比它更常见的了te.在我输入一个额外的s并按下之后TAB,它应该扩展testest(因为它是最小的共同点)并且testor在第二个之后TAB.

编辑:我试着更清楚......

  • te<TAB>
    • 应该什么也不做,因为"我们"不知道是否应该跟随't'(te t er)或's'(te s t,te s tor).
  • tes<TAB>
    • 应该扩展到test(因为它适用于两者 - 测试和测试者 - 并且teter不再是可能的匹配).
  • test<TAB>
    • 应该扩展到testor(只有可能的匹配).

好吧,建议弹出只是奖金,但我真的很想看到这种TAB行为.希望我不会在这里深奥,你可以帮助我用一些脚本技巧或插件来驯服VIM来做到这一点.

vim code-completion

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

如何在SQLAlchemy(ORM)中对3个表的多对多关系进行建模?

我在SQL中生锈,对SQL Alchemy来说是全新的,但是有一个即将推出的项目同时使用它们.所以我觉得我写点东西让自己感到舒服.遇到宿醉,我决定写一些东西来追踪酒精含量.

events在那里users参加和消耗drinks.这是我的三个基本表(有一个帮助表guestlist,用于am:n 用户事件之间的关系).

饮料会随时向所有用户列出所有活动中可用的饮品(无需映射任何内容).用户是不时创建的,事件也是如此.所有用户都可以加入所有活动,因此我使用该表来映射这些活动.guestlist

现在问题的核心:我需要跟踪用户在哪个时间消耗哪种饮料.我试着用另一张表解决这个问题shots(见下文),但我不确定这是否是一个很好的解决方案.

ERP图http://s1.anyimg.com/img/g6ld1ku/Bildschirmfoto.png

SQL Alchemy中它可能看起来有点像这样(或者不是,但这是我到目前为止提出的)::

guestlist_table = Table('guestlist', Base.metadata,
    Column('event_id', Integer, ForeignKey('events.id')),
    Column('user_id', Integer, ForeignKey('users.id'))
)

class Event(Base):

  __tablename__ = 'events'

  id = Column(Integer, primary_key=True)
  name = Column(String(80), nullable=False)
  started = Column(DateTime, nullable=False, index=True,
    default=datetime.datetime.now
  )
  users = relationship("User", secondary=guestlist_table, backref="events")
  # ...

class User(Base):

  __tablename__ …
Run Code Online (Sandbox Code Playgroud)

python sql orm sqlalchemy

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

在Python中重用不同函数的单元测试的良好实践

我是单元测试的新手,想要从鼻子框架开始.但是使用unittest,pytest的答案也是受欢迎的.当然还有一般建议.

我认为我得到了基本概念,但我缺乏设置测试的实践.我也在努力如何布局测试.我特别不确定如何处理我想在模块的不同功能上运行几个测试用例的情况:

例如:我可能有一个模块,diceroller.py它包含一些模拟滚动骰子的功能,修改和测试结果等等.滚动骰子的所有函数都应该通过相同的测试运行(它们返回一个整数列表,具有正确的值,是范围内的值,等等).但其中一些还应针对其他一些案例.

所以我有一个test子目录,想在那里设置我的测试代码.我该如何处理?

# a section of `diceroller.py`

def roll_a_dice(sides=6):
  """Return an integer x where `x >= 1 <= sides`"""
  return random.randint(1, sides)

def roll_dice(sides=6, count=1):
  """Return a list of integers (most function except this)"""
  rolls = list()
  while count:
    rolls.append(random.randint(1, sides))
    count -= 1
  return rolls

def roll_some_dice(sides=6, count=1, times=1):
  """Return a list of list containing integers"""
  some_rolls = list()
  while times:
    some_rolls.append(roll_dice(sides, count))
    times …
Run Code Online (Sandbox Code Playgroud)

python unit-testing

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

如何在未导入模块时编写装饰器以跳过某些测试?

我正在用鼻子进行测试.我知道如何跳过测试,但我想知道是否有一个简单的解决方案来编写装饰器以跳过测试,当某些模块未导入时.

现在我尝试导入mock并捕获ImportError它是否未安装和设置mock = None.在需要模拟的测试开始时,我将其if not mock: raise SkipTest()用作第一行.

这没关系.我只是想知道它是否也可以用装饰器?

更新

一段时间以来,我一直在使用kindall的答案,只是为了注意,它仍然无法正常工作(至少在所有情况下都不行!

当我使用测试函数时,它似乎工作,它不是一个生成器(不包含yield语句).每当我在使用的测试函数上使用装饰器时yield,无论是否assert在屈服函数中失败,测试都会通过.

任何想法为什么会发生这种情况以及如何防止这种行为?

python unit-testing nose

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

如何通过`through`表中的字段为Django中的M2M关系排序?

我有两个模型 — NotePinboard — 在 Django 应用程序中具有多对多关系。这两个模型通过另一个模型(Pin)相关联,因此我可以存储有关这种关系的其他信息。

我想在for Pinboard 中显示相关的Note实例。那不是问题。但我想预取笔记并在表格中的字段上订购它们。DetailViewpositionthrough

关于如何存档的任何提示(预取 + 在第三个表上排序)?

例子

这就是我到目前为止所拥有的......从某种意义上说,它是有效的,我不必查询每个条目,但我发现没有办法按它们对Note实例进行排序,position而无需对每个实例进行更多查询。

楷模

from django.db import models


class Note(models.Model):

    title = models.CharField(max_lenght=200)

    content = models.TextField()


class Pinboard(models.Model):

    title = models.CharField(max_lenght=200)

    notes = models.ManyToManyField(
        Note, blank=True, related_name='pinboards', through='Pin'
    )


class Pin(models.Model):

    class Meta:
        ordering = ['position', ]
        get_latest_by = 'position'

    pinboard = models.ForeignKey(Pinboard, related_name='note_pins')

    note = models.ForeignKey(Note, related_name='pinboard_pins')

    position = …
Run Code Online (Sandbox Code Playgroud)

python django m2m

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