小编Val*_*g21的帖子

PyMongo - 游标迭代

我最近开始通过shell和PyMongo测试MongoDB.我注意到返回游标并尝试迭代它似乎是实际迭代中的瓶颈.有没有办法在迭代期间返回多个文档?

伪代码:

for line in file:
    value = line[a:b]
    cursor = collection.find({"field": value})
    for entry in cursor:
        (deal with single entry each time)
Run Code Online (Sandbox Code Playgroud)

我希望做的是这样的:

for line in file
    value = line[a:b]
    cursor = collection.find({"field": value})
    for all_entries in cursor:
        (deal with all entries at once rather than iterate each time)
Run Code Online (Sandbox Code Playgroud)

我已经尝试按照这个问题使用batch_size()并将值一直更改为1000000,但它似乎没有任何影响(或者我做错了).

任何帮助是极大的赞赏.这个Mongo新手请轻松一点!

---编辑---

谢谢迦勒.我想你已经指出了我真正想要问的问题,这就是:有什么方法可以进行排序collection.findAll()或cursor.fetchAll()命令,就像cx_Oracle模块一样?问题不在于存储数据,而是尽可能快地从Mongo DB中检索数据.

据我所知,数据返回给我的速度由我的网络决定,因为Mongo必须单次获取每条记录,对吗?

python mongodb pymongo

21
推荐指数
2
解决办法
4万
查看次数

Python os.stat(file_name).st_size与os.path.getsize(file_name)

我有两段代码,它们都是为了做同样的事情 - 坐在一个循环中,直到写完文件.它们主要用于通过FTP/SCP进入的文件.

一个版本的代码使用它os.stat()[stat.ST_SIZE]:

size1,size2 = 1,0
while size1 != size2:
  size1 = os.stat(file_name)[stat.ST_SIZE]
  time.sleep(300)
  size2 = os.stat(file_name)[stat.ST_SIZE]
Run Code Online (Sandbox Code Playgroud)

另一个版本用于os.path.getsize():

size1,size2 = 0,0
while True:
  size2 = os.path.getsize(file_name)
  if size1 == size2:
    break
  else:
    time.sleep(300)
    size1 = size2
Run Code Online (Sandbox Code Playgroud)

我已经看到多个实例,其中使用第一种方法报告,当文件实际上仍在增长时,大小相同.是否有一些潜在的原因导致os.stat()错误报告而os.path.getsize()不会?我没有看到任何错误或异常.

python python-2.6

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

C - 比较数字字符串

出于专业的好奇心,比较C中两个完全数字字符串的最安全/最快/最有效的方法是什么?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void){

char str1[5] = "123";
char str2[5] = "123";
char *ptr;

if(atoi(str1) == atoi(str2))
    printf("Equal strings");

if(strtol(str1,&ptr,10) == strtol(str2,&ptr,10))
    printf("Equal strings");

if(strcmp(str1,str2)==0)
    printf("Equal strings");

return 0;
}
Run Code Online (Sandbox Code Playgroud)

c atoi strcmp strtol

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

Python三元运算符不能返回多个值?

我知道有些人不喜欢它,但我喜欢使用Python的三元运算符,因为它使得简单if/ else语句更清晰(我认为).无论如何,我发现我不能这样做:

>>> a,b = 1,2 if True else 0,0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)

我认为三元运算符的工作方式是它实质上构建了以下内容:

if True:
  a,b = 1,2
else:
  a,b = 0,0
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么我的第一个代码示例不起作用?并且,如果有一个,提供一个单行有条件地分配多个变量?

python

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

打开要追加的文件

我只是有一个过去的想法,并想到了更好的地方,然后就在这里.出于好奇,有没有人知道是否打开文件追加,如下所示:

file_name = "abc"
file_handle = open(file_name,"a")
Run Code Online (Sandbox Code Playgroud)

基本上与打开文件进行编写和寻求结束相同:

file_name = "abc"
file_handle = open(file_name,"w")
file_handle.seek(0,2) # 0 for offset, 2 for end-of-file
Run Code Online (Sandbox Code Playgroud)

我只是想知道是否打开一个文件for append实际上是在做第二个块,打开写入,然后搜索到文件的末尾,在幕后.

python

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

大多数Pythonic方法来处理将类拆分为多个类

我有一个可以与Oracle或MySQL连接的类.该类初始化为关键字"Oracle"或"MySQL"以及一些其他参数,这些参数是两种数据库类型的标准(要打印的内容,是否停止异常等).

if Oracle do A, elif MySQL do B当我开始时,根据需要添加它很容易,但是当我添加仅适用于一种数据库类型的更专业的代码时,这变得很难看.我把这个类分成两个,一个用于Oracle,一个用于MySQL,有一些共享函数以避免重复代码.

处理调用这些新类的最Pythonic方法是什么?我是否创建了一个使用相同关键字并返回正确类的包装函数/类?我是否更改了调用旧泛型类的所有代码以调用正确的特定于DB的类?

如果需要,我很乐意模拟一些示例代码,但我认为没有必要.在此先感谢您的帮助!

python

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

Amazon DynamoDB - 特定于区域的连接

我正在使用botoPython中的库连接到DynamoDB.以下代码对我来说很好:

import boto
key = 'abc'

secret = '123'
con = boto.connect_dynamodb(key,secret)
table = con.get_table('Table Name')
-- rest of code --
Run Code Online (Sandbox Code Playgroud)

当我尝试连接到特定区域时,我可以很好地连接,但让表格正常工作会引发错误:

import boto
from boto.ec2.connection import EC2Connection

key = 'abc'
secret = '123'
regions = EC2Connection(key,secret).get_all_regions() # some filtering after this line to remove unwanted entries
for r in regions:
  con = boto.connect_dynamodb(key,secret,region=r)
  table = con.get_table('Table Name') # throws the error below
  -- rest of code --
Run Code Online (Sandbox Code Playgroud)

使用上面的第二个代码块,我得到一个ValueError: No JSON object could be decoded.调用con.list_tables() …

python boto amazon-web-services amazon-dynamodb

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

多次定义函数

我有一个动态的Python服务,它将在每个记录的基础上定义函数,我遇到了一些我无法弄清楚的东西.假设我有一个如此设置的测试程序:

func_str = """
def func():
  print "top"
"""
exec func_str

func_str = """
def func():
  print "bottom"
"""
exec func_str

func()
Run Code Online (Sandbox Code Playgroud)

当然,这将打印"bottom",作为第二次exec func_str覆盖第一次调用.我好奇发生了什么事.是否以某种方式删除了第一个函数定义?

python

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