Python MongoDb和字符串

Python MongoDb和字符串,python,mongodb,Python,Mongodb,如何将字符串放入mongodb 我将以下字符串格式化为JSON,但它是一个完整的字符串 {"file_name": "König_CMP-SATAPCI11_-_SATA_PCI-controllerkaart", specs: [{"Verbinding met pc":"PCI Express"},{"Type controller":"Serial ATA"},{"VerpakkingVerpakkingDe verpakking geeft aan waarin het product

如何将字符串放入mongodb

我将以下字符串格式化为JSON,但它是一个完整的字符串

{"file_name": "König_CMP-SATAPCI11_-_SATA_PCI-controllerkaart", specs: [{"Verbinding met pc":"PCI Express"},{"Type controller":"Serial ATA"},{"VerpakkingVerpakkingDe verpakking geeft aan waarin het product word aangeleverd.":"Box"},{"Platform":"PC-Software"},{"Model":"CMP-SATAPCI11 - SATA PCI-controllerkaart"},{"Gewicht":"118 g"},{"Afmetingen inclusief verpakking":"12,2 x 3,6 x 20,2 cm (lxbxh)"},{"Artikelnummer":"CMP-SATAPCI11"},{"Release datum":"2013"},{"EAN":"5412810092369"}]}
我怎样才能把它放到MongoDB中? 如果我试着像这样把它放进去,它会给我一个错误:

TypeError: 'str' object does not support item assignment
编辑

编辑2


请原谅我编写了这么难看的代码,我还没有完成润色。

PyMongo API需要dict或子类的实例,而不是JSON字符串。请看

下面是一个使用上面的dict而不是字符串的示例:

>>> collection.insert({"file_name": "König_CMP-SATAPCI11_-_SATA_PCI-controllerkaart",    "specs": [{"Verbinding met pc":"PCI Express"},{"Type controller":"Serial ATA"},{"VerpakkingVerpakkingDe verpakking geeft aan waarin het product word aangeleverd":"Box"},{"Platform":"PC-Software"},{"Model":"CMP-SATAPCI11 - SATA PCI-controllerkaart"},{"Gewicht":"118 g"},{"Afmetingen inclusief verpakking":"12,2 x 3,6 x 20,2 cm (lxbxh)"},{"Artikelnummer":"CMP-SATAPCI11"},{"Release datum":"2013"},{"EAN":"5412810092369"}]})
ObjectId('5489d5effa5bd820b20f085b')
>>> collection.find_one()
{u'file_name': u'K\xf6nig_CMP-SATAPCI11_-_SATA_PCI-controllerkaart', u'_id': ObjectId('5489d5effa5bd820b20f085b'), u'specs': [{u'Verbinding met pc': u'PCI Express'}, {u'Type controller': u'Serial ATA'}, {u'VerpakkingVerpakkingDe verpakking geeft aan waarin het product word aangeleverd': u'Box'}, {u'Platform': u'PC-Software'}, {u'Model': u'CMP-SATAPCI11 - SATA PCI-controllerkaart'}, {u'Gewicht': u'118 g'}, {u'Afmetingen inclusief verpakking': u'12,2 x 3,6 x 20,2 cm (lxbxh)'}, {u'Artikelnummer': u'CMP-SATAPCI11'}, {u'Release datum': u'2013'}, {u'EAN': u'5412810092369'}]}

请注意,MongoDB中的密钥不能包含。字符。

您能添加您尝试过的引发异常的代码吗?如果您能提供完整的回溯,那么它将非常有用。添加了代码和异常,我认为代码是一个部分,它为您提供了正确的想法,如果需要所有的代码,我将听到它。我认为您已经注释掉了导致问题的重要部分。您的代码正在某个地方尝试对字符串文本str执行就地更新。@BatScream在添加循环时,现在缺少的唯一部分是获取Html的请求和特定字符串的查找,我知道,但是如何使用while循环创建dict实例呢?Python的dict类型可以从元组列表中创建,每个元组中的第一个元素是键,第二个元素是值。>>>dict['foo','bar']{'foo':'bar'}
text_file_doc = "{\"file_name\": \""+ titles+ "\", specs: ["

text_file_doc += #while loop that adds elements

client = MongoClient('HOST', HOST)
db = client.Products
collection = db.files
collection.insert(text_file_doc)
while x <= len(cntent)-1:
    test = str(cntent[x])
    test = strip_tags(test).replace("\n", "")
    content = startsoup.findAll("td", {"class": "specs_descr"})
    test2 = str(content[x])
    text_file_doc+= "{\"" + strip_tags(test).replace("\n", "") +"\":\""
    invoer =  strip_tags(test2).replace("\n", "")
    invoer = invoer.strip()
    text_file_doc+= invoer +"\"}"
    if x != len(cntent)-1:
        text_file_doc += ","
    x+=1
text_file_doc += "]}"

class MLStripper(HTMLParser):
    def __init__(self):
        self.reset()
        self.fed = []
    def handle_data(self, d):
        self.fed.append(d)
    def get_data(self):
        return ''.join(self.fed)

def strip_tags(html):
    s = MLStripper()
    s.feed(html)
    return s.get_data()
>>> collection.insert({"file_name": "König_CMP-SATAPCI11_-_SATA_PCI-controllerkaart",    "specs": [{"Verbinding met pc":"PCI Express"},{"Type controller":"Serial ATA"},{"VerpakkingVerpakkingDe verpakking geeft aan waarin het product word aangeleverd":"Box"},{"Platform":"PC-Software"},{"Model":"CMP-SATAPCI11 - SATA PCI-controllerkaart"},{"Gewicht":"118 g"},{"Afmetingen inclusief verpakking":"12,2 x 3,6 x 20,2 cm (lxbxh)"},{"Artikelnummer":"CMP-SATAPCI11"},{"Release datum":"2013"},{"EAN":"5412810092369"}]})
ObjectId('5489d5effa5bd820b20f085b')
>>> collection.find_one()
{u'file_name': u'K\xf6nig_CMP-SATAPCI11_-_SATA_PCI-controllerkaart', u'_id': ObjectId('5489d5effa5bd820b20f085b'), u'specs': [{u'Verbinding met pc': u'PCI Express'}, {u'Type controller': u'Serial ATA'}, {u'VerpakkingVerpakkingDe verpakking geeft aan waarin het product word aangeleverd': u'Box'}, {u'Platform': u'PC-Software'}, {u'Model': u'CMP-SATAPCI11 - SATA PCI-controllerkaart'}, {u'Gewicht': u'118 g'}, {u'Afmetingen inclusief verpakking': u'12,2 x 3,6 x 20,2 cm (lxbxh)'}, {u'Artikelnummer': u'CMP-SATAPCI11'}, {u'Release datum': u'2013'}, {u'EAN': u'5412810092369'}]}