小编Bas*_*asj的帖子

将浮点数组渲染为24位RGB图像(例如,使用PIL)

x是一个numpy.float32数组,使用来自值-2000.这些是dB(分贝)值.

当我这样做时(按照此处的建议):

Image.fromarray(x, mode='F')
Run Code Online (Sandbox Code Playgroud)

我得到一个灰度或有时几乎是黑色的图像.

如何将[-200,0]中的float映射到24位RGB字节数组(使用色彩映射),可以使用Python模块PIL读取Image.fromarray(x, mode='RGB')


编辑:

所需的.wav音频文件是在这里,为此我们要绘制的频谱.

这是一些要测试的代码:

import scipy, numpy as np
import scipy.io.wavfile as wavfile
import numpy as np
from PIL import Image

def stft(x, fftsize=1024, overlap=4): 
    hop = fftsize / overlap
    w = scipy.hanning(fftsize+1)[:-1]
    return np.array([np.fft.rfft(w*x[i:i+fftsize]) for i in range(0, len(x)-fftsize, hop)])

def dB(ratio):
    return 20 * np.log10(ratio+1e-10)

def magnitudedB(frame, fftsize=1024):
    w = scipy.hanning(fftsize+1)[:-1]
    ref = np.sum(w) / 2
    return …
Run Code Online (Sandbox Code Playgroud)

python numpy spectrogram python-imaging-library colormap

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

*.*在C中的argv [1]中

背景:某些Windows命令行程序允许*.*在第一个参数中使用:

myprogram *.*
Run Code Online (Sandbox Code Playgroud)

并将自动循环目录的所有文件.

其他一些则没有,因此需要批处理循环:

for %%c in ("*.*") do myprogram "%%c"
Run Code Online (Sandbox Code Playgroud)

问题:是否有标准方式(在C语言中定义或OS提供?)允许*.**.txt在参数中,以便它自动对相关文件进行处理?

int main(int argc, char *argv[])
{
    FILE *kf;

    "for fname in argv[1]"    // pseudo code here meaning: 
                              // let's loop on all files described by the first argument
    {
        kf = fopen(fname, "rb");
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我想检查一个解决方案是否存在,然后滚动我自己(重新发明通配符扩展的轮子,使用FindFirstFile等)

c windows filesystems filenames wildcard

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

使用Windows 7在Sublime Text 2的控制台中打印utf-8字符串

python myscript.py从Windows控制台cmd.exe(即Sublime Text 之外)运行此代码时,它的工作原理如下:

# coding: utf8
import json
d = json.loads("""{"mykey": {"readme": "Café"}}""")
print d['mykey']['readme']
Run Code Online (Sandbox Code Playgroud)

咖啡店

在Sublime Text 2中运行时CTRL+B,它会失败:

  • 这样(默认情况下):

    print d ['mykey'] ['readme']
    UnicodeEncodeError:'ascii'编解码器无法对位置3中的字符u'\ xe9'进行编码:序数不在范围内(128)
    [以0.1秒结束,退出代码为1]

  • 或者像这样,在使用Sublime Text 3(即在构建系统中添加)在Python 3打印UTF-8的答案应用解决方案之后:cmd.exe

    [解码错误 - 输出不是utf-8]
    [解码错误 - 输出不是utf-8]
    [以0.1秒完成]

  • 添加"env": {"PYTHONIOENCODING": "utf8"},Python Sublime-build文件也无济于事

如何"encoding": "utf-8"正确使用Sublime Text 2(适用于Windows)控制台,如果它包含一些UTF8字符?

注意:这不是使用Sublime Text 3在Python 3打印UTF-8的重复,我之前已经链接到这个问题.

这是print文件:

{ "cmd": ["python", "-u", "$file"], …
Run Code Online (Sandbox Code Playgroud)

python windows encoding utf-8 sublimetext

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

在模态弹出框+ iframe中显示时的外部网站/图像大小

在我的网站上,当点击链接时,我需要显示一个模态弹出窗口(参见此解决方案):

  • 有时会显示一个外部网站(下面链接#1)
  • 有时只显示JPG图像(下面链接#2)

问题:显示时:

  1. 模态弹出窗口中的外部网站,大小合适(参见链接#1)

  2. 在模态弹出窗口中的jpeg图像,大小不正常,从某种意义上说它不适应屏幕(参见链接#2):

在此输入图像描述

  1. jpeg图像在新窗口中,大小合适,自动适应屏幕(参见链接#3)

在此输入图像描述

问题:如何使用模态弹出窗口显示的JPG图像iframe自动调整其大小,即如果JPG的高度很高,它会自动调整大小?即与在新窗口中显示图像时完全一样(参见链接#3)

PS:尝试使用此代码段时,不要忘记在浏览器中启用加载不安全脚本.如果不是,则不会显示iframe.

或者使用这个现场演示jsfiddle.

document.getElementById("link1").onclick = function(e) {
    e.preventDefault();
    document.getElementById("popupdarkbg").style.display = "block";
    document.getElementById("popup").style.display = "block";
    document.getElementById('popupiframe').src =  "http://example.com";
    document.getElementById('popupdarkbg').onclick = function() {
        document.getElementById("popup").style.display = "none";
        document.getElementById("popupdarkbg").style.display = "none";
    };
    return false;
}

document.getElementById("link2").onclick = function(e) {
    e.preventDefault();
    document.getElementById("popupdarkbg").style.display = "block";
    document.getElementById("popup").style.display = "block";
    document.getElementById('popupiframe').src =  "https://i.imgur.com/pz2iPBW.jpg";
    document.getElementById('popupdarkbg').onclick = function() {
        document.getElementById("popup").style.display = "none";
        document.getElementById("popupdarkbg").style.display = "none";
    }; …
Run Code Online (Sandbox Code Playgroud)

html javascript iframe popup

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

NTFS是否存储每个inode/文件的哈希值或CRC32,如何访问它?

我知道如何读取文件,将这些字节传递给哈希算法(例如 MD5SUM、SHA256 或 CRC32),并获取哈希值。

在这里我问的问题略有不同:

每次我们在 NTFS 分区上写入/修改文件时,它是否会重新计算哈希或 CRC32 并将此信息存储在 NTFS 元数据/FAT/MFT(主文件表)中(我不记得确切的名称)?

注意:重要的是我只想读取存储在文件系统中的存储哈希/CRC(即读取几个字节,最多应该是几毫秒),而不是重新计算哈希(这将花费很多秒来计算 10 GB 文件)。


如果是这样,如何使用 Python 访问特定文件的 CRC 或哈希值?有没有类似的东西:

import ntfsutil
ntfsutil.getCRC('d:/big50GBfile.dat')  # done in < 10 ms
Run Code Online (Sandbox Code Playgroud)

python windows filesystems ntfs ntfs-mft

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

将击键发送到特定窗口(在后台),但同时执行其他操作

这段代码(灵感来自哪个是在 Python 上模拟键盘和鼠标的最简单方法?)打开一个记事本并每秒发送 A、B、C、D、...、Z 键:

import win32com.client, time
shell = win32com.client.Dispatch("WScript.Shell")
shell.Run('Notepad')
time.sleep(1)
shell.AppActivate("Notepad")
for i in range(65,91):
    shell.SendKeys(chr(i))
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

我想让这个操作在后台继续,继续我在计算机上的工作,并将击键发送到记事本(在后台)

问题:如果我同时打开另一个应用程序(例如:浏览器),击键将被发送到当前活动窗口,这是我不想要的!

问题:即使此应用程序不在前台,如何让 Python将击键发送到 notepad.exe ?

上下文:我正在自动化一些长期任务,要求我的 Python 脚本app.exe在大约 15 分钟内向(在后台)发送击键,但同时我想用计算机做其他事情。

注意:更一般地说,我感兴趣的用例是进程 app.exe 可能打开对话框、关闭对话框、打开其他窗口的情况,因此解决方案应该能够将击键发送到进程活动窗口. 因此,像这里这样具有固定 hWnd 的解决方案不能直接工作。

python windows user-interface winapi automation

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

拒绝 xmlrpc.php 文件但不记录失败的请求

我将此添加到.htaccessWordPress 网站:

<files xmlrpc.php>
order allow,deny
deny from all
</files>
Run Code Online (Sandbox Code Playgroud)

它有效,当有人尝试访问时http://example.com/xmlrpc.php,会显示此消息:

Forbidden
您无权访问此服务器上的 /xmlrpc.php。

但是,日志仍然显示 ( less /var/log/apache2/error.log):

[Thu May 02 10:02:03.316061 2019] [access_compat:error] [pid 19467] 
[client 1.2.3.4:49409] AH01797: client denied by server 
configuration: /path/to/xmlrpc.php
Run Code Online (Sandbox Code Playgroud)

如何拒绝访问 xmlrpc.php(可能来自 .htaccess)但防止它出现在 Apache 日志中?

php apache wordpress .htaccess xml-rpc

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

Python 中的滚动哈希非常快?

我正在rsync用 Python 编写一个类似玩具的工具。与许多类似的工具一样,它首先使用非常快的哈希作为滚动哈希,然后在找到匹配项后使用 SHA256(但后者不在此处的主题:SHA256、MDA5 等作为滚动哈希太慢)哈希)。

我目前正在测试各种快速哈希方法:

import os, random, time

block_size = 1024  # 1 KB blocks
total_size = 10*1024*1024  # 10 MB random bytes
s = os.urandom(total_size)

t0 = time.time()
for i in range(len(s)-block_size):
    h = hash(s[i:i+block_size])
print('rolling hashes computed in %.1f sec (%.1f MB/s)' % (time.time()-t0, total_size/1024/1024/(time.time()-t0)))
Run Code Online (Sandbox Code Playgroud)

我得到:0.8 MB/s ...所以Python内置hash(...)函数在这里太慢了。

哪种解决方案可以在标准机器上实现至少 10 MB/s 的更快哈希值?

python hash for-loop sha256 rolling-computation

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

如何自动(从命令行)安装适用于 C++、.NET、C# 等的 Visual Studio 构建工具构建环境

注意:我已经阅读过如何在不安装 IDE 的情况下在构建服务器上安装 VS2017 版本的 msbuild?但这并不能解决完全无 GUI、仅脚本安装的问题。


这些年来,我注意到以下几点:

  • 我从Github下载了一个项目;或者打开我的一个旧项目(比如 4 年前的项目)

  • 跑步msbuild.exe theproject.sln

  • 哎呀,我没有正确的 Visual Studio 版本/.NET Framework 版本/缺少正确的 SDK(这里是许多其他示例情况)

  • 然后花 X 小时浏览https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019等网站,安装一个包,然后注意到它不是正确的(msbuild仍然失败),下载另一个包,安装它等等。

  • 最后你已经下载了 8 GB 的软件包,等待下载,等待安装,等待重新启动,但你仍然不确定它是否有效

  • 您的计算机现在混乱不堪,同时安装了 5 个不同版本的 SDK,这些 SDK 可能会相互冲突(Z 版本是否覆盖/卸载了 Y 版本?)

这可能是避免此问题的解决方案:

如何从命令行安装所需的 MS 构建工具?(我不想使用任何 IDE,我想编写所有内容的脚本)

如果可能的话,我会一次性为build.bat每个项目创建一个文件,如下所示:

msbuildget --package=VC14 --installdir=c:\buildtools\vc14     # automatically download and install
C:\buildtools\vc14\bin\msbuild.exe myproject.sln
Run Code Online (Sandbox Code Playgroud)

或者

msbuildget --package=.NET-35 --installdir=c:\buildtools\net35   
C:\buildtools\net35\bin\msbuild.exe myproject.sln
Run Code Online (Sandbox Code Playgroud)

这个怎么做?

通过这种方法,即使你打开一个6年的项目,你也应该能够构建它。

c# windows msbuild visual-studio visual-c++

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

如何避免出现“很抱歉,发生服务器错误。请稍等并重试”时出现 DEADLINE_EXCEEDED。发生?

我读过类似的问题,例如“我们很抱歉,发生服务器错误。请稍等片刻,然后再试一次。”以及许多其他问题,但它们特定于其他类型的错误。


我有一个 Google Apps 脚本运行和处理带有分钟计时器的 Gmail 电子邮件。

每天我都会通过电子邮件收到日志We're sorry, a server error occurred. Please wait a bit and try again.(请参见下面的屏幕截图 1)。问题在于:

  • 没有发生错误所在行的报告,因此很难调试

  • 它时不时地随机发生,即使在这个精确的时间没有发生任何事情(没有要处理的电子邮件),并且在 99.9% 的时间里,一切正常,没有错误。当没有要处理的电子邮件时,我不明白为什么此代码会失败:

      var mylabel = GmailApp.getUserLabelByName('emailstoprocess'); 
      var threads = mylabel.getThreads();
      for (var i = 0; i < threads.length; i++) {
          // do something
      }
    
    Run Code Online (Sandbox Code Playgroud)
  • 在我的脚本中,我不调用任何外部 API,只调用 Gmail API,并且没有耗时的循环(尤其是当没有新电子邮件时:脚本应该什么都不做)。我怎样才能控制这个DEADLINE_EXCEEDED错误(见下面的截图 #2)?确实在仪表板,Executions页面中,我看到:We're sorry, a server error occurred: DEADLINE_EXCEEDED

DEADLINE_EXCEEDED即使我的脚本在失败时什么也没做,如何避免这个错误? 或者至少如何避免每天收到有关此的通知?

在此处输入图片说明

在此处输入图片说明

javascript google-apps deadlines google-apps-script gmail-api

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