小编ost*_*ach的帖子

使用 SQLAlchemy 创建一个表,但推迟创建索引,直到数据加载

我有一个 python 文件,它使用 SQLAlchemy 来定义给定数据库中的所有表,包括所有适用的索引和外键约束。该文件如下所示:

Base = declarative_base()

class FirstLevel(Base):
    __tablename__ = 'first_level'
    first_level_id = Column(Integer, index=True, nullable=False, primary_key=True, autoincrement=True)
    first_level_col1 = Column(String(100), index=True)
    first_level_col2 = Column(String(100))
    first_level_col3 = Column(String(100))

class SecondLevel(Base):
    __tablename__ = 'second_level'
    second_level_id = Column(Integer, index=True, nullable=False, primary_key=True, autoincrement=True)
    first_level_id = Column(None, ForeignKey(FirstLevel.first_level_id, onupdate='cascade', ondelete='cascade', deferrable=True), index=True, nullable=False)
    second_level_col1 = Column(String(100), index=True)
    second_level_col2 = Column(String(100))
    second_level_col3 = Column(String(100))

class ThirdLevel(Base):
    __tablename__ = 'third_level'
    third_level_id = Column(Integer, index=True, nullable=False, primary_key=True, autoincrement=True)
    first_level_id = Column(None, ForeignKey(FirstLevel.first_level_id, onupdate='cascade', ondelete='cascade', deferrable=True), …
Run Code Online (Sandbox Code Playgroud)

python database postgresql sqlalchemy pandas

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

Python `tempfile.gettempdir()` 不尊重 TMPDIR

我正在使用共享的 Linux 集群,并且希望我的临时目录而不是/tmp/username默认的/tmp.

根据tempfile文档gettempdir()应该使用$TMPDIR环境变量来确定临时目录。

然而,事实似乎并非如此?!

$ export TMPDIR='/tmp/username' 
$ python -c "\
import os
import tempfile
print(os.environ['TMPDIR'])
print(tempfile.gettempdir())"
/tmp/username
/tmp
Run Code Online (Sandbox Code Playgroud)

有什么建议么?

python temporary-files

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

在解析文件时,Rust比Python慢

我希望使用Rust来加速目前用Python编写的一些文本处理程序.

为了测试两种语言的性能,我决定在一个非常简单的任务上测试它们:

  • STDIN逐行读入文件.
  • 如果该行以该行开头>,则将该行保存到headers.txt文件中.
  • 否则,将行保存到sequences.txt文件中.

对于此测试,我使用的是一个包含1000万行的fasta文件,如下所示:

$ head uniparc_active-head.fasta
>UPI0000000001 status=active
MGAAASIQTTVNTLSERISSKLEQEANASAQTKCDIEIGNFYIRQNHGCNLTVKNMCSAD
ADAQLDAVLSAATETYSGLTPEQKAYVPAMFTAALNIQTSVNTVVRDFENYVKQTCNSSA
VVDNKLKIQNVIIDECYGAPGSPTNLEFINTGSSKGNCAIKALMQLTTKATTQIAPKQVA
GTGVQFYMIVIGVIILAALFMYYAKRMLFTSTNDKIKLILANKENVHWTTYMDTFFRTSP
MVIATTDMQN
>UPI0000000002 status=active
MMTPENDEEQTSVFSATVYGDKIQGKNKRKRVIGLCIRISMVISLLSMITMSAFLIVRLN
QCMSANEAAITDAAVAVAAASSTHRKVASSTTQYDHKESCNGLYYQGSCYILHSDYQLFS
DAKANCTAESSTLPNKSDVLITWLIDYVEDTWGSDGNPITKTTSDYQDSDVSQEVRKYFC
Run Code Online (Sandbox Code Playgroud)

这是我的Python脚本:

import fileinput

with open('headers.txt', 'w') as hof, \
        open('sequences.txt', 'w') as sof:
    for line in fileinput.input():
        if line[0] == '>':
            hof.write(line)
        else:
            sof.write(line)
Run Code Online (Sandbox Code Playgroud)

和我的Rust脚本(我编译cargo build --release):

use std::io;
use std::fs::File;
use std::io::Write;
use std::io::BufRead;

fn main() {
    let stdin = io::stdin();
    let mut headers = File::create("headers.txt").unwrap();
    let mut sequences …
Run Code Online (Sandbox Code Playgroud)

performance rust

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

编写一个类,当以 list(c) 和 dict(c) 调用时返回不同的值

我正在尝试实现一个自定义类,该类在调用 as list(c)or时返回不同的值dict(c)。然而,我的印象是既list(c)dict(c)使用c.__iter__()引擎盖下?如果是这种情况,我怎样才能获得不同的行为调用list(c)dict(c)?我知道这是可能的,因为 Python 字典和 Pandas DataFrames 有不同的 hevariours。

例如:

Foo类:
    def __init__(self):
        self._keys = ['a', 'b', 'd', 'd', 'e']
        self._data = [10, 20, 30, 40, 50]

    def __iter__(self):
        对于密钥,zip 中的值(self._keys, self._data):
            yield 键,值

打电话dict(c)我得到我想要的:

>>> f = Foo()
>>> dict(f)
{'a':10,'b':20,'d':40,'e':50}

但是,我无法list(c)打印出键(或值)列表,而是同时获取:

>>> f = Foo()
>>> 列表(f)
[('a', 10), ('b', 20), ('d', 30), ('d', 40), ('e', 50)]

字典的等效代码要清晰得多:

>>> f = …

python

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

为什么`dataclasses.asdict(obj)`>比`obj .__ dict __()`慢10倍

我正在使用Python 3.6和ericvsmithdataclassesbackport软件包。

看来通话dataclasses.asdict(my_dataclass)比通话慢约10倍my_dataclass.__dict__

In [172]: @dataclass
     ...: class MyDataClass:
     ...:     a: int
     ...:     b: int
     ...:     c: str
     ...: 

In [173]: %%time
     ...: _ = [MyDataClass(1, 2, "A" * 1000).__dict__ for _ in range(1_000_000)]
     ...: 
CPU times: user 631 ms, sys: 249 ms, total: 880 ms
Wall time: 880 ms

In [175]: %%time
     ...: _ = [dataclasses.asdict(MyDataClass(1, 2, "A" * 1000)) for _ in range(1_000_000)]
     ...: 
CPU times: user 11.3 s, sys: …
Run Code Online (Sandbox Code Playgroud)

python python-dataclasses

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

降低curl进度更新的频率

curl有没有办法降低更新进度表的频率?

我需要在 CI 管道中下载一个大文件。我希望定期查看进度更新,以便 CI 管道不会自动标记为“卡住”。但是,默认情况下,curl会经常更新其状态,因此我最终会得到包含数千行的管道日志,如下所示:

[...]
 33  189G   33 64.0G    0     0  8107k      0  6:48:27  2:18:09  4:30:18 4580k
 33  189G   33 64.1G    0     0  8107k      0  6:48:28  2:18:10  4:30:18 4901k
 33  189G   33 64.1G    0     0  8107k      0  6:48:29  2:18:11  4:30:18 5312k
 33  189G   33 64.1G    0     0  8106k      0  6:48:31  2:18:12  4:30:19 5003k
 33  189G   33 64.1G    0     0  8106k      0  6:48:32  2:18:13  4:30:19 4991k
 33  189G   33 64.1G    0     0  8105k      0  6:48:34  2:18:14 …
Run Code Online (Sandbox Code Playgroud)

curl

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

即使在Python 3.6中也不保留属性定义顺序

根据Python 3.6发行说明," 现在保留了类属性定义顺序".这在PEP 520中更详细地描述.

但是,我似乎无法让这个工作?

例如:

class Foo:
    c = 1
    b = 2
    a = 3

print(Foo.__dict__)
# mappingproxy({'__dict__': <attribute '__dict__' of 'Foo' objects>,
#               '__doc__': None,
#               '__module__': '__main__',
#               '__weakref__': <attribute '__weakref__' of 'Foo' objects>,
#               'a': 3,
#               'b': 2,
#               'c': 1})
Run Code Online (Sandbox Code Playgroud)

要么:

class Foo:
    def __init__(self, c=1, b=2, a=3):
        self.c = c
        self.b = b
        self.a = a

foo = Foo()

foo.__dict__
# {'a': 3, 'b': 2, 'c': 1} …
Run Code Online (Sandbox Code Playgroud)

python python-3.6

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