小编use*_*733的帖子

熊猫:read_csv(在单个文件中读取多个表)

我有一个具有多个CSV表的文件(如下所示的示例)。该文件被上载到数据库。我想对该文件进行一些操作。为此,我正在考虑使用pandas通过read_csv函数将每个表读入单独的数据框。但是,在阅读文档时,我没有看到指定要读取/解析的行的子集的选项。这可能吗?如果没有,还有其他选择吗?

样本文件:

TABLE_1
col1,col2
val1,val2
val3,val4

TABLE_2
col1,col2,col3,col4
val1,val2,val3,val4
...

...
Run Code Online (Sandbox Code Playgroud)

我可以对文件进行初始遍历以确定每个表的开始/结束行。但是,read_csv参数之一是“ filepath_or_buffer ”,但我不确定“ buffer”部分是什么。它是字符串列表还是一个大字符串或其他东西?我可以使用什么缓冲区?有人可以指出一个使用read_csv和缓冲区的小例子吗?感谢您的任何想法。

python pandas

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

指向模板化函数的函数指针

我有两个模板化函数签名。这里 T 可以是 int 或 double。

template <typename T>
Box<T> f2p(Box<T> const& box, Point<T> const& pt, Orientation o)
{
 ...
}

template <typename T>
Box<T> p2f(Box<T> const& box, Point<T> const& pt, Orientation o)
{
 ...
}
Run Code Online (Sandbox Code Playgroud)

现在根据方向,我想调用 f2p 或 p2f。我想创建一个指向 f2p 或 p2f 的函数指针。如何创建指向模板函数的函数指针?我想达到如下效果:

typename <template T>
Box<T> do_transformation(Box<T> const& box, ..., int dir = 0)
{
   function pointer p = dir ? pointer to f2p : pointer to p2f

   return p<T>(box);
}
Run Code Online (Sandbox Code Playgroud)

我尝试类似的方法,但出现编译错误:

Box<T> (*p)(Box<T>, Point<T>, Orientation) = dir …
Run Code Online (Sandbox Code Playgroud)

c++ templates template-meta-programming

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

Python:将sqlite3与多处理配合使用

我有一个SQLite3数据库。我需要解析10000个文件。我从每个文件中读取一些数据,然后使用此数据查询数据库以获取结果。我的代码在单个流程环境中运行良好。但是尝试使用多处理池时出现错误。

My approach without multiprocessing (works OK):
1. Open DB connection object
2. for f in files: 
     foo(f, x1=x1, x2=x2, ..., db=DB)
3. Close DB

My approach with multiprocessing (does NOT work):
1. Open DB
2. pool = multiprocessing.Pool(processes=4) 
3. pool.map(functools.partial(foo, x1=x1, x2=x2, ..., db=DB), [files])
4. pool.close()
5. Close DB 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:sqlite3.ProgrammingError:未调用基本Cursor .__ init__。

我的数据库类的实现如下:

def open_db(sqlite_file):
    """Open SQLite database connection.

    Args:
    sqlite_file -- File path

    Return:
    Connection
    """

    log.info('Open SQLite database %s', sqlite_file)
    try:
        conn = sqlite3.connect(sqlite_file)
    except …
Run Code Online (Sandbox Code Playgroud)

python sqlite

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

pytest:有没有办法报告测试的内存使用情况?

我检查了 pytest 文档,但找不到任何相关内容。我知道 pytest --durations=0 将打印出所有测试的运行时。有没有办法让 pytest 也打印出函数消耗的峰值内存使用量?否则,我可能只能使用下面的装饰功能。但我想知道是否有更好的方法来做到这一点。

from functools import wraps

    def mem_time(func):
        @wraps(func)
        def wrapper(*args, **kwargs):

            # Start of function
            r0 = resource.getrusage(resource.RUSAGE_SELF)
            t0 = datetime.datetime.now()

            # Call function
            status = func(*args, **kwargs)

            # End of function
            r1 = resource.getrusage(resource.RUSAGE_SELF)
            t1 = datetime.datetime.now()

            sys.stderr.write('{}: utime {} stime {} wall {}\n'.format(func.__name__,
                                                                      datetime.timedelta(seconds=r1.ru_utime - r0.ru_utime),
                                                                      datetime.timedelta(seconds=r1.ru_stime - r0.ru_stime),
                                                                      t1 - t0))

            sys.stderr.write('{}: mem {} MB ({} GB)\n'.format(func.__name__,
                                                              (r1.ru_maxrss - r0.ru_maxrss) / 1000.0,
                                                              (r1.ru_maxrss - r0.ru_maxrss) / 1000000.0))

            return status

        return …
Run Code Online (Sandbox Code Playgroud)

python pytest

3
推荐指数
2
解决办法
1836
查看次数

ldap3:获取用户的电子邮件地址

我正在使用 python ldap3 模块。我能够连接到我公司的 LDAP 服务。我想使用用户名进行查询并获取该用户的名字/姓氏+电子邮件地址。

我说:

results = conn.search('DC=corp,DC=XXXXXX,DC=com',
                      "(&(objectClass=person)(sAMAccountName=" + user_id + "))")
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到一个匹配:

[DN: CN=YYYY\, ZZZZ,OU=Workers,DC=amr,DC=corp,DC=XXXXXX,DC=com - STATUS: Read - READ TIME: 2020-01-14T20:43:16.146874]
Run Code Online (Sandbox Code Playgroud)

YYYY姓氏也是如此,ZZZZ名字也是如此。但电子邮件不存在。我如何检索它?谢谢。

python ldap ldap-query

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

熊猫:将列值替换为空(如果预定义列表中不存在)

我有一个列表,X其中包含一组列的合法值。说,我有专栏A。我想替换(设置​​为空字符串)中的元素(df['A']如果它们的值不在X中)。如何在Pandas中高效地做到这一点?

我知道有isin(),但这只是检查值是否存在并返回一系列True / False。

python pandas

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

在ref/cref范围内同时迭代

我有一个带两个整数向量的函数.第一个向量作为引用传递,第二个向量作为const的引用传递.我想同时迭代两个向量,并更新第一个向量.如下所示:

#include <iostream>
#include <vector>
#include <boost/foreach.hpp>
#include <boost/range/combine.hpp>

void foo(std::vector<int>& a, std::vector<int> const& b) 
{
        boost::tuple<int&, int const&> x;
        BOOST_FOREACH(x, boost::combine(a,b)) {
           int& v1 = x.get<0>();
           int const& v2 = x.get<1>();
           v1 = v1 + v2 + 5;
        }

}

int main(int argc, char **argv) 
{   
  std::vector<int> a(3,10);
  std::vector<int> b(3,10);

  foo(a,b);
  for (int v : a) {
    std::cout << v << std::endl;   
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是迭代两个范围,其中一个是ref,另一个是ref const.如何正确使用boost:combine/for循环?谢谢.

c++ boost c++11

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