Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从unicode转换为ascii python_Python_Mongodb_Pymongo - Fatal编程技术网

从unicode转换为ascii python

从unicode转换为ascii python,python,mongodb,pymongo,Python,Mongodb,Pymongo,好的。。这可能是复制品。。但我认为我甚至不知道正确的问题。 我猜我有一个unicode字符串。。(基本上我是从mongodb阅读的..mongodb以那种形式存储所有内容???老实说,我不确定..但这就是我得到的 { u'preview': u'Hello World!!'} 因此,在所有字段前面都有一个u。。 我基本上是想把它们提取出来!!然后把它们附加到一个巨大的字符串中。 让我们假设我做了如下事情: string = '' resolve = foo['first_resolved

好的。。这可能是复制品。。但我认为我甚至不知道正确的问题。 我猜我有一个unicode字符串。。(基本上我是从mongodb阅读的..mongodb以那种形式存储所有内容???老实说,我不确定..但这就是我得到的

{ u'preview': u'Hello World!!'}
因此,在所有字段前面都有一个u。。 我基本上是想把它们提取出来!!然后把它们附加到一个巨大的字符串中。 让我们假设我做了如下事情:

 string =  ''
 resolve = foo['first_resolved_at']
 string += resolve
所以它抛出了一个错误

TypeError: coercing to Unicode: need string or buffer, NoneType found
我做错了什么? 我想我必须把它转换成一个字符串,但是怎么转换呢???
谢谢

Unicode到ascii只是
str(一些Unicode字符串)

这个 {u'preview:u'Hello World!!'}

是一个映射。在其上循环以获取内容:

keys=[]
values=[]
for i in mymap:
    print i
    print "contains:",mymap[i]
    keys.append(i)
    values.append(i)
或者只是
mymap.keys()
mymap.values()

所以我认为你根本不应该转换你的字符串。但是如果你想转换的话,那就
str(q)

编辑:


现在,您的示例代码在编辑后生效。我希望这是有用的。

尽管答案被接受,但我想我会提供一个示例,说明您应该如何使用join()而不是将字符串添加在一起。这也向您展示了避免无值:

d = {u'a': u'a', u'c': None, u'b': u'b', u'e': None, u'd': None, u'g': u'g', u'f': u'f', u'i': u'i', u'h': u'h', u'k': u'k', u'j': u'j', u'm': None, u'l': u'l', u'o': u'o', u'n': None, u'p': u'p'}

resolve = ''.join((value for value in d.itervalues() if value is not None))
print resolve
# u'abgfihkjlop'
如果你只想在一组预定的键上循环:

keys = ('c', 'g', 'f', 'm')
''.join([v for v in (d[k] for k in keys) if v is not None])
下面是一个测试,显示了这种方法、附加到列表和将字符串添加到一起的区别:

from time import time

d = {}
for i in xrange(1000):
    v = u'v%d' % i
    d[v] = v

def test1():
    return ''.join(v for v in d.itervalues() if v is not None)

def test2():
    result = []
    for v in d.itervalues():
        if v is not None:
            result.append(v)
    return ''.join(result)

def test3():
    result = ''
    for v in d.itervalues():
        if v is not None:
            result += v
    return result

def timeit(fn):
    start = time()
    r = fn()
    end = time() - start
    print "Sec:", end, "msec:", end*1000


>>> timeit(test1)
Sec: 0.000195980072021 msec: 0.195980072021
>>> timeit(test2)
Sec: 0.000204086303711 msec: 0.204086303711
>>> timeit(test3)
Sec: 0.000397920608521 msec: 0.397920608521

你可以看到,当你的循环变得更大时,它真的会起作用。

我刚刚尝试了这个方法,效果很好。请举一个例子说明实际的错误,然后发布-这些频繁的编辑有点疯狂。我认为这里缺少一些信息。
foo
显然是某种django查询对象或pymongo wrapper,其行为类似于defaultdict,对于缺少的键不返回任何值。添加ascii和unicode并没有什么错(尽管在循环中很糟糕,您应该加入).
resolve
显然是None,您需要检查您的值。是的..你们是正确的..问题是..有时当数据库中没有值时..它返回None..:(尝试将其附加到字符串可能是导致问题的原因。老实说,除非您显示更多的代码,否则这可能是一次否决。您在循环中执行某些操作,但最终没有得到任何结果。foo是什么类型的对象?它是纯python dict还是django或pymongo包装器?请显示更多。