小编gel*_*ida的帖子

搜索 csv 文件最快的方法是什么?

任务:检查文件中序列号和护照号码的可用性。

我的决定如下:

def check_passport(filename, series: str, number: str) -> dict:
    """
    Find passport number and series
    :param filename:csv filename path
    :param series: passport series
    :param number: passport number
    :return:
    """
    print(f'series={series}, number={number}')
    find = False
    start = datetime.datetime.now()
    with open(filename, 'r', encoding='utf_8_sig') as csvfile:
        reader = csv.reader(csvfile, delimiter=',')
        try:
            for row in reader:
                if row[0] == series and row[1] == num:
                    print(row[0])
                    print(row[1])
                    find = True
                    break
        except Exception as e:
            print(e)
    print(datetime.datetime.now() - start)
    if find:
        return {'result': False, …
Run Code Online (Sandbox Code Playgroud)

python csv

8
推荐指数
2
解决办法
8190
查看次数

使 python 排序/比较的方式与 GNU 排序相同

经过一些初步测试后,Python 似乎使用与 Linux 排序(gnu 排序)相同的排序顺序和 C 排序顺序(如果语言环境设置为“C”)。

\n\n

不过,我希望能够编写 Python 代码,根据语言环境以与 gnu 排序相同的方式进行排序和比较。

\n\n

说明问题的小示例代码:

\n\n
import os \nimport subprocess\n\nwords = [\n    "Abd",\n    "\xc3\xa9fg",\n    "aBd",\n    "aBd",\n    "zzz",\n    "ZZZ",\n    "efg",\n    "abd",\n    "fff",\n    ]\n\nwith open("tosort", "w") as fout:\n    for word in words:\n        fout.write(word + "\\n")\n\nos.environ["LC_ALL"] = "en_US.UTF-8" \nproc = subprocess.Popen(["sort", "tosort"], stdout=subprocess.PIPE)\nsort_en_utf = proc.stdout.read().decode(\'utf-8\').split()\n\nos.environ["LC_ALL"] = "C" \nproc = subprocess.Popen(["sort", "tosort"], stdout=subprocess.PIPE) \nsort_c = proc.stdout.read().decode(\'utf-8\').split()\n\nos.environ["LC_ALL"] = "en_US.UTF-8"\nsort_py = sorted(words)\n\nfor row in zip(sort_en_utf, sort_c, sort_py):\n    print(" ".join(row))\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果运行上面的代码,我会得到以下输出:

\n\n
abd Abd Abd\naBd ZZZ …
Run Code Online (Sandbox Code Playgroud)

python sorting bash shell

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

如何在异步代码异常时启动 pdb

我有一个 asyncio 应用程序,其中发生了一些异常。

让我们以这个小脚本为例:

import asyncio

async def coro1():
    for a in range(1, -1, -1):
       await asyncio.sleep(1)
       print("coro1", a)
       c = 1/a  # ### !!!Will raise exception when a is 0!!!!

async def coro2():
    for n in range(6):
        print("------- coro2", n)
        await asyncio.sleep(0.5)

async def main():
    coros = [coro1(), coro2()]
    completed, pending = await asyncio.wait(coros)
    print("comp", completed)
    print("pend", pending)

event_loop = asyncio.get_event_loop()
event_loop.run_until_complete(main())
Run Code Online (Sandbox Code Playgroud)

如果我对单线程非异步程序遇到类似的问题,我就会这样做

python -m pydb scriptname
Run Code Online (Sandbox Code Playgroud)

输入c并在代码中以 pydb 结束,这引发了异常,现在我可以查看和显示变量,我可以看到例如,那a是 0

我在我的 asyncio 应用程序中尝试了同样的操作,

我仅在 …

python pdb python-asyncio

5
推荐指数
0
解决办法
2117
查看次数

Python click group: How to have -h/--help for all commands

Context:

I'm having several scripts with loads of sub commands that I'd like to convert to using click

目前,所有这些命令都接受-h--help以便显示帮助选项。我想保持这种行为。

问题:

单击接受默认--help显示帮助文本,但不显示-h

对于单击命令,可以通过添加轻松更改。

@click.group()
@click.help_option("--help", "-h")
def cli():
    """ the doc string """
    enter code here

@cli.command()
@click.help_option("--help", "-h")
def mycommand()
    pass

@cli.command()
@click.help_option("--help", "-h")
def mycommand1()
    pass

...
Run Code Online (Sandbox Code Playgroud)

但是,如果我有数十个命令,我必须重新应用装饰器行

@click.help_option("--help", "-h")
Run Code Online (Sandbox Code Playgroud)

堡垒每个子命令。

有什么技巧可以避免到处写这一行吗?

python python-click

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

标签 统计

python ×4

bash ×1

csv ×1

pdb ×1

python-asyncio ×1

python-click ×1

shell ×1

sorting ×1