小编gri*_*eve的帖子

在Django模型中存储列表的最有效方法是什么?

目前我的代码中有很多python对象,类似于以下内容:

class MyClass():
  def __init__(self, name, friends):
      self.myName = name
      self.myFriends = [str(x) for x in friends]
Run Code Online (Sandbox Code Playgroud)

现在我想把它变成一个Django模型,其中self.myName是一个字符串字段,self.myFriends是一个字符串列表.

from django.db import models

class myDjangoModelClass():
    myName = models.CharField(max_length=64)
    myFriends = ??? # what goes here?
Run Code Online (Sandbox Code Playgroud)

由于列表是python中常见的数据结构,我希望它有一个Django模型字段.我知道我可以使用ManyToMany或OneToMany关系,但我希望避免代码中的额外间接.

编辑:

我添加了这个相关的问题,人们可能觉得有用.

python django django-models

122
推荐指数
10
解决办法
12万
查看次数

如何在python中检测文件是否为二进制(非文本)?

如何在python中判断文件是否为二进制(非文本)?我在python中搜索大量文件,并继续在二进制文件中获取匹配.这使得输出看起来非常混乱.

我知道我可以使用grep -I,但是我使用的数据比grep允许的更多.

在过去,我会搜索大于0x7f的字符,但utf8等在现代系统中使这不可能.理想情况下,解决方案会很快,但任何解决方案都可以.

python binary file

96
推荐指数
10
解决办法
6万
查看次数

为什么在类上定义__getitem__使它在python中可迭代?

为什么在类上定义__getitem__使其可迭代?

例如,如果我写:

class b:
  def __getitem__(self, k):
    return k

cb = b()

for k in cb:
  print k
Run Code Online (Sandbox Code Playgroud)

我得到输出:

0
1
2
3
4
5
6
7
8
...
Run Code Online (Sandbox Code Playgroud)

我真的希望看到"for c in cb:"中返回的错误

python iterator overloading

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

计算字符串中前导空格的pythonic方法是什么?

我知道我可以用这个来计算字符串中的前导空格:

>>> a = "   foo bar baz qua   \n"
>>> print "Leading spaces", len(a) - len(a.lstrip())
Leading spaces 3
>>>
Run Code Online (Sandbox Code Playgroud)

但是有更多的pythonic方式吗?

python

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

Python中将字符串转换为全部小写的最有效方法是删除所有非ascii字母字符?

我需要在Python中执行一个简单的任务,即将字符串转换为全部小写并删除所有非ascii非字母字符.

例如:

"This is a Test" -> "thisisatest"
"A235th@#$&( er Ra{}|?>ndom" -> "atherrandom"
Run Code Online (Sandbox Code Playgroud)

我有一个简单的功能来做到这一点:

import string
import sys

def strip_string_to_lowercase(s):
    tmpStr = s.lower().strip()
    retStrList = []
    for x in tmpStr:
        if x in string.ascii_lowercase:
            retStrList.append(x)

    return ''.join(retStrList)
Run Code Online (Sandbox Code Playgroud)

但我不禁想到有更高效,更优雅的方式.

谢谢!


编辑:

感谢所有回答的人.我学会了,并且在某些情况下重新学习了很多python.

python string

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

是否可以在python中更改父进程的环境?

在Linux中当我从shell调用python时,它复制了它的环境,并启动了python进程.因此,如果我执行以下操作:

import os
os.environ["FOO"] = "A_Value"
Run Code Online (Sandbox Code Playgroud)

当python进程返回时,FOO(假设它原来是未定义的)仍将是未定义的.有没有办法让python进程(或任何子进程)修改其父进程的环境?

我知道你通常用类似的东西来解决这个问题

source script_name.sh
Run Code Online (Sandbox Code Playgroud)

但这与我的其他要求相冲突.

python linux environment

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

在python中使用MySQLdb插入mysql之后,如何安全有效地获取行id?

我在mysql中有一个简单的表,其中包含以下字段:

  • id - 主键,int,自动增量
  • 名称 - varchar(50)
  • 描述 - varchar(256)

使用MySQLdb,一个python模块,我想在表中插入一个名称和描述,并获取id.

在伪代码中:

db = MySQLdb.connection(...)
queryString = "INSERT into tablename (name, description) VALUES" % (a_name, a_desc);"

db.execute(queryString);
newID = ???
Run Code Online (Sandbox Code Playgroud)

python mysql

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

您将如何继承并覆盖django模型类以创建listOfStringsField?

我想为django模型创建一个新类型的字段,它基本上是一个ListOfStrings.因此,在您的模型代码中,您将拥有以下内容:

models.py:

from django.db import models

class ListOfStringsField(???):
    ???

class myDjangoModelClass():
    myName = models.CharField(max_length=64)
    myFriends = ListOfStringsField() # 
Run Code Online (Sandbox Code Playgroud)

other.py:

myclass = myDjangoModelClass()
myclass.myName = "bob"
myclass.myFriends = ["me", "myself", "and I"]

myclass.save()

id = myclass.id

loadedmyclass = myDjangoModelClass.objects.filter(id__exact=id)

myFriendsList = loadedclass.myFriends
# myFriendsList is a list and should equal ["me", "myself", "and I"]
Run Code Online (Sandbox Code Playgroud)

您将如何编写此字段类型,并遵循以下规定?

  • 我们不想做创建刚刚CRAMS所有串在一起,并像一个领域的令牌将它们分开场这个.在某些情况下,这是一个很好的解决方案,但我们希望保持字符串数据的标准化,以便django以外的工具可以查询数据.
  • 该字段应自动创建存储字符串数据所需的任何辅助表.
  • 理想情况下,辅助表应该只包含每个唯一字符串的一个副本.这是可选的,但是很高兴.

看看Django代码看起来我想要做类似于ForeignKey正在做的事情,但文档很稀疏.

这导致以下问题:

  • 可以这样做吗?
  • 它已经完成(如果是这样的话)?
  • 关于如何扩展和覆盖他们的模型类,特别是他们的关系类,是否有关于Django的文档?我没有看到很多关于他们代码方面的文档,但是有这个.

这是来自这个问题.

python django inheritance django-models

8
推荐指数
3
解决办法
5375
查看次数

在python中将负值打印为十六进制

我在C++中有以下代码片段:

for (int x = -4; x < 5; ++x)
       printf("hex x %d 0x%08X\n", x, x);
Run Code Online (Sandbox Code Playgroud)

它的输出是

hex x -4 0xFFFFFFFC
hex x -3 0xFFFFFFFD
hex x -2 0xFFFFFFFE
hex x -1 0xFFFFFFFF
hex x 0 0x00000000
hex x 1 0x00000001
hex x 2 0x00000002
hex x 3 0x00000003
hex x 4 0x00000004
Run Code Online (Sandbox Code Playgroud)

如果我在python中尝试相同的事情:

for x in range(-4,5):
   print "hex x", x, hex(x)
Run Code Online (Sandbox Code Playgroud)

我得到以下内容

hex x -4 -0x4
hex x -3 -0x3
hex x -2 -0x2
hex x -1 -0x1 …
Run Code Online (Sandbox Code Playgroud)

python number-formatting

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

是否有更优雅的方法来计算x =(y/n)+(y%n?1:0)?

编程时,我经常发现自己需要计算如下内容:

x = (y / n) + (y % n ? 1 : 0);

或者更明确地说:

x = y / n;
if (y % n != 0) {
   x = x + 1;
}
Run Code Online (Sandbox Code Playgroud)

是否有更优雅的方式来实现这一价值?可以在不使用条件表达式的情况下实现吗?

language-agnostic math

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