我有很多功能,例如:
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 中将函数名作为字符串获取?但我真的没有看到在这里做这件事的好方法。此外,这个问题接近于在该函数内确定函数名称(不使用回溯),但这里适用于启动和结束时函数名日志记录的特定用例,因此不完全是重复的。
我正在编写的工具中的第一个处理步骤之一是找到 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)
输入文件(下载链接):
形态变换后的输出:
问题:输出的正方形不再是正方形,因此正方形左上角的坐标根本不精确!
我可以减少内核大小,但它会保留更多不需要的小元素。
问题:如何更好地检测正方形的角点?
笔记:
由于形态闭合只是膨胀 + 侵蚀,我找到了罪魁祸首:
import cv2, numpy as np
img = cv2.imread('rotatednoisy-cropped.png', cv2.IMREAD_GRAYSCALE)
kernel = np.ones((30, 30), np.uint8)
img = cv2.dilate(img, kernel, iterations = 1)
Run Code Online (Sandbox Code Playgroud)
经过这一步,还是可以的:
然后
img = cv2.erode(img, kernel, iterations = 1)
Run Code Online (Sandbox Code Playgroud)
给
现在不行了!
我已经知道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的比较
我有一个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 启用右键单击以具有“后退”、“前进”、“重新加载”、“复制”、“粘贴”等功能?
我已经构建了一个Windows可执行文件(带有MSVC ++),该文件需要管理员特权才能运行(它对文件进行索引);我什至用我购买的代码签名证书对其进行了代码签名。
它在Win7,Win8上运行良好,但是在Windows 10上,如果我从浏览器下载文件,那么我会从IE / Edge收到此消息:
该文件包含病毒,已被删除
并且它几乎是不可能的(非电力用户)用户接入到ZIP,解压缩,并运行.exe文件。(找到正确的检疫地点并将其从检疫区中移除等非常复杂;而且对于商业产品而言还不可行)
显然,这是一个误报(我没有病毒,我用很多杀毒软件和https://www.virustotal.com对其进行了检查)。
有什么解决方案?(我以为我已经尽力了,甚至用著名CA的证书对它进行代码签名)
文本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,这种说“您输入的密码错误”的方法是否安全? .
我经常需要使用 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) 假设我们有列表
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)从列表中连接元素?
当将 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)
iffullpage是True,并且只是一个 HTML 片段:
<button>Click me</button>
Run Code Online (Sandbox Code Playgroud)
如果是False?
在.NET代码中,我有一个循环,它接受来自D:\ Temp及其子目录的所有.wav文件:
string[] fileHolder = Directory.GetFiles("D:\\Temp","*.wav", SearchOption.AllDirectories);
Run Code Online (Sandbox Code Playgroud)
我想排除来自文件夹名称中包含"blablabla"的文件夹的所有.wav文件.
怎么办?
PS这类似于包含子目录的Exclude目录?,但我无法成功使用本主题的答案.
python ×7
.net ×1
aes ×1
antivirus ×1
browser ×1
c# ×1
contextmenu ×1
cryptography ×1
cv2 ×1
docx ×1
electron ×1
encryption ×1
flask ×1
function ×1
htmx ×1
javascript ×1
jinja2 ×1
libreoffice ×1
list ×1
opencv ×1
pdf ×1
python-2.7 ×1
python-3.x ×1
string ×1
subdirectory ×1
winapi ×1
windows ×1