小编Bas*_*asj的帖子

在函数本身中打印函数名称

我有很多功能,例如:

def DBworker_thatdoes_job7():
    print "DBworker_thatdoes_job7 starting..."

    ... the actual code here ...

    print "DBworker_thatdoes_job7 finished."
Run Code Online (Sandbox Code Playgroud)

如何在不硬编码函数名称的情况下执行此操作?这是我想要实现的目标:

def DBworker_thatdoes_job7():
    print thisfunction.name + " starting..."
    ...

def DBworker_thatdoes_cleaning18():
    print thisfunction.name + " starting..."
    ...
Run Code Online (Sandbox Code Playgroud)

注意:我已经看过如何在 Python 中将函数名作为字符串获取?但我真的没有看到在这里做这件事的好方法。此外,这个问题接近于在该函数内确定函数名称(不使用回溯),但这里适用于启动和结束时函数名日志记录的特定用例,因此不完全是重复的。

python function

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

如何找到这4个正方形的外角坐标?(如果图像旋转,形态学关闭/打开不保存正方形)

我正在编写的工具中的第一个处理步骤之一是找到 4 个大黑色方块的外角坐标。然后它们将用于进行单应变换,以对图像进行去歪斜/反旋转(又名透视变换),最终得到一个矩形图像。这是一个旋转和嘈杂的输入示例(下载链接在这里):

在此处输入图片说明

为了只保留大方块,我使用了形态变换,如关闭/打开:

import cv2, numpy as np
img = cv2.imread('rotatednoisy-cropped.png', cv2.IMREAD_GRAYSCALE)
kernel = np.ones((30, 30), np.uint8)
img = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
cv2.imwrite('output.png', img)
Run Code Online (Sandbox Code Playgroud)

输入文件(下载链接):

在此处输入图片说明

形态变换后的输出:

在此处输入图片说明

问题:输出的正方形不再是正方形,因此正方形左上角的坐标根本不精确

我可以减少内核大小,但它会保留更多不需要的小元素。

问题:如何更好地检测正方形的角点?


笔记:

python opencv image-processing image-morphology cv2

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

r"string"b"string"u"string"Python 2/3比较

我已经知道r"string"在Python 2.7中常用于正则表达式模式.我u"string"认为,我已经看到过Unicode字符串.现在使用Python 3,我们看到了b"string".

我在不同的来源/问题中搜索过这些内容,例如python字符串之前的ab前缀什么意思?但是很难在Python中看到带有前缀的所有这些字符串的大图,尤其是Python 2对3.

问题:您是否有经验可以记住Python中带有前缀的不同类型的字符串?(或者可能是一个包含Python 2列和一个Python 3列的表?)

注意:我已经阅读了几个问题+答案,但我没有找到一个容易记住与所有前缀/ Python 2 + 3的比较

python string python-2.7 python-3.x

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

如何使用 Electron BrowserWindow 和 BrowserView 启用右键单击?

我有一个BrowserView内部BrowserWindow(我确实需要两者):

const { app, BrowserWindow, BrowserView } = require('electron');

app.on('ready', () => {
    browserWindow = new BrowserWindow({ width: 800, height: 500, frame: false });
    bv = new BrowserView({ webPreferences: { nodeIntegration: false }});
    bv.setBounds({ x: 0, y: 30, width: 800, height: 470});
    bv.webContents.loadURL('https://old.reddit.com');
    browserWindow.setBrowserView(bv);
});
Run Code Online (Sandbox Code Playgroud)

在网页上单击鼠标右键没有任何作用。如何像往常一样使用 Chrome 启用右键单击以具有“后退”、“前进”、“重新加载”、“复制”、“粘贴”等功能?

在此处输入图片说明

javascript browser google-chrome contextmenu electron

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

在我构建的可执行文件(和代码签名)上显示“此文件包含病毒,已被删除”

我已经构建了一个Windows可执行文件(带有MSVC ++),该文件需要管理员特权才能运行(它对文件进行索引);我什至用我购买的代码签名证书对其进行了代码签名。

它在Win7,Win8上运行良好,但是在Windows 10上,如果我从浏览器下载文件,那么我会从IE / Edge收到此消息:

该文件包含病毒,已被删除

并且它几乎是不可能的(非电力用户)用户接入到ZIP,解压缩,并运行.exe文件。(找到正确的检疫地点并将其从检疫区中移除等非常复杂;而且对于商业产品而言还不可行)

显然,这是一个误报(我没有病毒,我用很多杀毒软件和https://www.virustotal.com对其进行了检查)。

有什么解决方案?(我以为我已经尽力了,甚至用著名CA的证书对它进行代码签名)

windows winapi internet-explorer antivirus microsoft-edge

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

AES:如何检测输入的密码错误?

文本s已被加密:

s2 = iv + Crypto.Cipher.AES.new(Crypto.Hash.SHA256.new(pwd).digest(), 
                                    Crypto.Cipher.AES.MODE_CFB, 
                                    iv).encrypt(s.encode())
Run Code Online (Sandbox Code Playgroud)

然后,稍后,用户输入密码pwd2,我们使用以下命令对其进行解密:

iv, cipher = s2[:Crypto.Cipher.AES.block_size], s2[Crypto.Cipher.AES.block_size:]

s3 = Crypto.Cipher.AES.new(Crypto.Hash.SHA256.new(pwd2).digest(),
                           Crypto.Cipher.AES.MODE_CFB, 
                           iv).decrypt(cipher)
Run Code Online (Sandbox Code Playgroud)

问题:即使输入的密码pw2错误,最后一行也能正常工作。当然解密后的文本将是随机字符,但不会触发错误。

问:Crypto.Cipher.AES.new(...).decrypt(cipher)密码pw2不正确怎么办?或者至少如何检测错误的密码?


这是一个链接的问题:如果密码无效则使 AES 解密失败,这里讨论了问题的加密部分(较少的编程):AES,这种说“您输入的密码错误”的方法是否安全? .

python encryption cryptography aes

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

Headless LibreOffice 在 Windows 上导出为 PDF 非常慢(比 Linux 慢 6 倍)

我经常需要使用 LibreOffice 将许多(> 1000).docx 文档导出为 PDF。这是一个示例文档:test.docx。以下代码可以工作,但在 Windows 上速度相当慢(每个 PDF 文档平均 3.3 秒):

import subprocess, docx, time   # first do: pip install python-docx 
for i in range(10):
    doc = docx.Document('test.docx')
    for paragraph in doc.paragraphs:
        paragraph.text = paragraph.text.replace('{{num}}', str(i))
    doc.save('test%i.docx' % i)   # these 4 previous lines are super fast - a few ms
    t0 = time.time()
    subprocess.call(r'C:\Program Files\LibreOffice\program\soffice.exe --headless --convert-to pdf test%i.docx --outdir . --nocrashreport --nodefault --nofirststartwizard --nolockcheck --nologo --norestore"' % i)
    print('PDF generated in %.1f sec' % (time.time()-t0)) …
Run Code Online (Sandbox Code Playgroud)

python pdf docx libreoffice

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

根据条件连接列表中的元素

假设我们有列表

L = ['a', '!b', '!c', 'd', 'e', '!f', 'g', 'h']
Run Code Online (Sandbox Code Playgroud)

如果每个元素以!.

预期输出:

M = ['a!b!c', 'd', 'e!f', 'g', 'h']
Run Code Online (Sandbox Code Playgroud)

这有效,但join将列表转换为字符串可能会不必要地复杂,然后将字符串重新拆分为列表:

M = ''.join(('' if l.startswith('!') else '\n') + l for l in L).splitlines()[1:]
# ['a!b!c', 'd', 'e!f', 'g', 'h']
Run Code Online (Sandbox Code Playgroud)

是否有一种更简单的方法可以根据条件 ( '!' in l)从列表中连接元素?

python list concatenation

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

根据请求标头(HTMX)生成完整页面或 HTML 片段

当将 HTMX 框架与 Python Flask 结合使用时,您必须能够:

  • 如果请求是由 HTMX(通过 AJAX)完成的,则将其作为 HTML片段提供服务

  • 如果用户完成请求(例如直接在浏览器 URL 栏中输入),则将请求作为完整页面进行服务器处理

有关更多详细信息,请参阅具有固定页眉/页脚和 HTMX 的单页应用程序,具有浏览 URL 历史记录允许手动页面重新加载 。

如何使用 Flask 模板系统做到这一点?

from flask import Flask, render_template, request
app = Flask("")
@app.route('/pages/<path>')
def main(path):
    htmx_request = request.headers.get('HX-Request') is not None
    return render_template(path + '.html', fullpage=not htmx_request)
app.run()
Run Code Online (Sandbox Code Playgroud)

输出整页的标准方法是什么(基于父模板pagelayout.html):

{% extends "pagelayout.html" %}
{% block container %}
<button>Click me</button>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

iffullpageTrue,并且只是一个 HTML 片段:

<button>Click me</button>
Run Code Online (Sandbox Code Playgroud)

如果是False

python jinja2 flask htmx

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

在目录循环中排除子目录

在.NET代码中,我有一个循环,它接受来自D:\ Temp及其子目录的所有.wav文件:

string[] fileHolder = Directory.GetFiles("D:\\Temp","*.wav", SearchOption.AllDirectories);
Run Code Online (Sandbox Code Playgroud)

我想排除来自文件夹名称中包含"blablabla"的文件夹的所有.wav文件.

怎么办?

PS这类似于包含子目录的Exclude目录?,但我无法成功使用本主题的答案.

.net c# subdirectory

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