当我练习时:
import mongoengine
from mongoengine import connect,queryset
import argparse
from mongoengine.queryset.visitor import Q
import pandas as pd
from mongoengine import *
import pymongo
from datetime import datetime
import datetime
import json
from bson.son import SON
if connect('AggregationsDataBase', host='mongodb://127.0.0.1', port=27017):
print('Connection Established')
class Extraction(mongoengine.Document):
meta = {'collection': 'MetaDataStore'}
# date = mongoengine.ComplexDateTimeField()#else non humanreadable
date = mongoengine.DateTimeField()#else non readable
site = mongoengine.StringField()
language = mongoengine.StringField()
site_type = mongoengine.StringField()
occurence = mongoengine.DecimalField()
categories = mongoengine.ListField()
type = mongoengine.StringField()
@queryset_manager
def objects(Extraction, queryset):
return queryset.order_by('-date')
# #dummy Visualization (WORKS OK )
for search in Extraction.objects():
print ("site: {} Date: {} occurence : {} language: {} site_type: {} categories: {}"\
.format(search.site,search.date,search.occurence,search.language,search.site_type,search.categories))
#data_sample: how date is shaped (all good so far )
sample = Extraction.objects.first()
sample=sample.to_json()
print(sample)
# # Simple aggregations via MongoEngine (WORKS OK ):
search=Extraction.objects()
print(search.count())
print(search.average('occurence'))
print(search.filter(site_type="news").count())
#advanced Aggregations Queries: (RETURNS EMPTY LIST [])
kwargs = {}
start = datetime.datetime(2014, 12, 11)
end = datetime.datetime(2019, 3, 13)
kwargs['date'] = { '$lt': end, '$gt': start }
T = Extraction.objects(**kwargs)
x = T.filter((Q(date__gte=start) & Q(date__lte=end)))
print(x)
正在工作。但这
>>> "a".__add__("b")
'ab'
不起作用。 这是可行的:
>>> 1.__add__(2)
SyntaxError: invalid syntax
这是怎么回事?它与变量命名规则有关吗?python是否认为我在不使用空间时试图创建变量?
答案 0 :(得分:2)
python词法分析器尝试将整数后跟一个点解释为浮点数。为了避免这种歧义,您必须添加一个额外的空间。
为了进行比较,相同的代码可以双重使用:
>>> 4.23.__add__(2)
6.23
如果将int放在括号中也可以使用:
>>> (5).__add__(4)
9
答案 1 :(得分:2)
Python解析器特意保持简洁明了。当它看到1.
时,就认为您正处于浮点数的中间,并且1._
不是有效数字(或更正确地说,1.
是有效的浮点,并且您可以t用_
跟随值:"a" __add__("b")
也是错误)。因此,任何清楚表明.
都不是数字的组成部分的方法都会有所帮助:正如您所发现的那样,在点之前有一个空格(由于在数字中找不到空格,Python放弃了浮点运算的想法与完整的语法)。括号也可以:(1).__add__(2)
。添加另一个点也可以:1..__add__(2)
(这里的1.
是有效数字,然后.__add__
做通常的事情)。
答案 2 :(得分:2)
使用1.
时,解释器会认为您已开始编写浮点数(您可以在IDE中(至少Pycharm)看到点是蓝色,而不是白色)。空格告诉它将1.
视为一个完整的数字1.0
。 1..__add__(2)
也可以解决问题。