我正在处理一个试图开发网络应用程序的问题,其中一部分将上传的docx文件转换为pdf文件(经过一些处理后).使用python-docx和其他方法,我不需要安装word的Windows机器,甚至linux上的libreoffice,用于大多数处理(我的web服务器是pythonanywhere - linux但没有libreoffice,没有sudo或apt install权限).但转换为pdf似乎需要其中之一.通过在这里和其他地方探索问题,这是我到目前为止:
import subprocess
try:
from comtypes import client
except ImportError:
client = None
def doc2pdf(doc):
"""
convert a doc/docx document to pdf format
:param doc: path to document
"""
doc = os.path.abspath(doc) # bugfix - searching files in windows/system32
if client is None:
return doc2pdf_linux(doc)
name, ext = os.path.splitext(doc)
try:
word = client.CreateObject('Word.Application')
worddoc = word.Documents.Open(doc)
worddoc.SaveAs(name + '.pdf', FileFormat=17)
except Exception:
raise
finally:
worddoc.Close()
word.Quit()
def doc2pdf_linux(doc):
"""
convert a …Run Code Online (Sandbox Code Playgroud) 我正在使用该zeep程序包访问https上的一些API,并且在每个连接上它都会打印出警告(到stderr):
Forcing soap:address location to HTTPS
Run Code Online (Sandbox Code Playgroud)
我确实进行了一些搜索,发现负责的行是this,这意味着这是模块的日志记录级别的结果。更改日志级别似乎需要编辑此文件。
这对我来说是一个不好的解决方案,因为我希望能够在运行时关闭此警告,因为使用此软件包的应用程序将是冻结的应用程序(exe)。
如果是这样,那么这些是显示该警告所需的最少行(尽管显然,这里的域名是虚构的,用户名和密码也是如此):
import zeep
client = zeep.CachingClient('https://api.somedomain.com/Services/ApiService.svc?singleWsdl')
client.service.VerifyLogin('user', 'pass')
Run Code Online (Sandbox Code Playgroud)
我知道zeep可以将客户端设置为不强制使用https,但是我认为这样会使连接的安全性降低?(毕竟,我将用户名和密码传递为不带https的明文)
我在 pycharm 中安装 opencv-python 时遇到问题。打开pycharm后,我点击设置,然后点击项目解释器,点击“+”并搜索正确的模块,我开始安装但失败了
Could not find a version that satisfies the requirement opencv-python (from versions: )
No matching distribution found for opencv-python
Run Code Online (Sandbox Code Playgroud)
此外,我尝试通过控制台安装它,但出现相同的错误。我也更新到了最新的 pip 版本,我该如何解决这个问题?
在我的代码中,我需要检测变量是否是函数并对其执行一些操作。
一切都很顺利,直到我现在使用创建了一个部分函数functools,突然我的一些测试失败了:
import types
import functools
def f(s):
print(s)
l = lambda s: print(s)
pf = functools.partial(f, 'Hello World')
pl = functools.partial(l, 'Hello World')
test_f = isinstance(f, types.FunctionType) # True
test_l = isinstance(l, types.FunctionType) # True
test_pf = isinstance(pf, types.FunctionType) # False
test_pl = isinstance(pl, types.FunctionType) # False
Run Code Online (Sandbox Code Playgroud)
为什么它们之间有差异?两种类型都是可调用的...更重要的是,如果我不能使用,我如何检测某个变量是否是一个函数,即使它是一个部分函数types.FunctionType?
我正在使用Google云计算引擎,在它上面有4个运行Ubuntu 18.04的实例。我还在“ VPC网络->外部IP地址”中保留了一个静态IP地址。
现在,我想以编程方式将该IP地址每次分配给不同的实例之一。在Google Cloud控制台中,这很容易,只需单击保留IP旁边的“更改”,然后将“分配给”我想要的任何实例。但是,如何通过命令行使用gcloud?
我已经研究gcloud和gcloud beta命令,但找不到它。有什么解决办法吗?
奇怪的问题,我使用此命令通过ffmpeg(通过Windows上的cmd)捕获我的网络摄像头:
ffmpeg -y -t 300 -rtbufsize 1024M -f dshow -i video="Lenovo EasyCamera" -c:v libx264 -preset veryslow -crf 25 Desktop.mkv
Run Code Online (Sandbox Code Playgroud)
一切正常.但是当我通过python作为子进程尝试相同的命令时,它失败了.这是python代码:
from subprocess import Popen
cmd = ['ffmpeg', '-y', '-t', '300', '-rtbufsize', '1024M', '-f', 'dshow', '-i', 'video="Lenovo EasyCamera"', '-c:v', 'libx264', '-preset', 'veryslow', '-crf', '25', 'Desktop.mkv']
p = Popen(cmd)
Run Code Online (Sandbox Code Playgroud)
输出以下错误并冻结:
[dshow @ 00000000023a2cc0] Could not find video device with name ["Lenovo EasyCamera"] among source devices of type video.
video="Lenovo EasyCamera": I/O error
Run Code Online (Sandbox Code Playgroud)
任何人都可以解决这个问题并告诉我我做错了什么?或者它是python或子进程模块中的一些已知错误(使用python 3.6.1,但没有附加到特定版本,如果它将帮助我解决这个问题)?
提前致谢!
PS这个问题是对这个问题的一个跟进,如果这是相关的:如何在Windows中使用ffmpeg抓取笔记本电脑摄像头视频
我搜索了python-docx其他软件包的文档以及堆栈溢出,但找不到如何docx使用 python 从文件中删除所有图像。
我的具体用例:我需要将数百个 Word 文档转换为“草稿”格式以供客户查看。这些草稿应与原始文档相同,但必须删除/编辑其中的所有图像。
抱歉,没有提供我尝试过的示例,我尝试过的是数小时的研究,但没有提供任何信息。我发现这个问题是关于如何从Word文件中提取图像,但这并没有从实际文档中删除它们:Extract pictures from Word and Excel with Python
从那里和其他来源我发现docx文件可以被读取为简单的zip文件,我不知道这是否意味着可以在没有图像的情况下“重新压缩”而不影响文件的完整性docx(编辑:只需删除图像即可,但python-docx由于缺少对图像的引用而无法继续使用此文件),但认为这可能是解决方案的路径。
有任何想法吗?
我有一个形状为 (10000,1296) 的数组 (numpy),我想将其保存为 10,000 张 36x36 大小的图像。数组中的所有值都在范围内(0,255)。所以我用这段代码来做到这一点(效果很好):
for i, line in enumerate(myarray):
img = Image.new('L',(36,36))
img.putdata(line)
img.save(str(i)+'.png')
Run Code Online (Sandbox Code Playgroud)
我想使用该Image.fromarray方法替换此代码,但是与原始方法相比,生成的图片失真得无法识别。首先我试过这个:
myarray = myarray.reshape(10000,36,36)
for i, line in enumerate(myarray):
img = Image.fromarray(line, 'L')
img.save(str(i)+'.png')
Run Code Online (Sandbox Code Playgroud)
这没有用。所以为了调试,我想我只会尝试一个项目并这样做:
Image.fromarray(myarray[0].reshape(36,36), 'L').save('test.png')
Run Code Online (Sandbox Code Playgroud)
再次 - 乱码扭曲的图像。
所以我想要么fromarray没有像我想象的那样工作,要么我reshape太天真并且弄乱了数据,但我无法解决这个问题。欢迎任何想法。
试图让我的代码更加高效和可读,但我陷入了困境。假设我想构建一个类似棋盘的东西,在 8x8 网格上交替黑白颜色。所以,使用 numpy,我这样做了:
import numpy as np
board = np.zeros((8,8), np.int32)
for ri in range(8):
for ci in range(8):
if (ci + ri) % 2 == 0:
board[ri,ci] = 1
Run Code Online (Sandbox Code Playgroud)
很好地输出:
array([[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1], …Run Code Online (Sandbox Code Playgroud) 我有一个示例角色,我根据操作系统和包管理器安装一些包:
# THIS IS IN tasks/main.yml
- name: Ensure archlinux-keyring is updated
community.general.pacman:
name: archlinux-keyring
state: latest
update_cache: yes
when: ansible_pkg_mgr == "pacman"
Run Code Online (Sandbox Code Playgroud)
如果这个角色作为剧本的一部分运行,Ansible 将收集事实,一切都很好。但是,如果我将其作为独立角色运行:
ansible localhost -m include_role -a name=examplerole
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
localhost | FAILED! => {
"msg": "The conditional check 'ansible_pkg_mgr == \"pacman\"' failed. The error was: error while evaluating conditional (ansible_pkg_mgr == \"pacman\"): 'ansible_pkg_mgr' is undefined
Run Code Online (Sandbox Code Playgroud)
我知道我可以强制 Ansible 在角色中收集这些事实,但是一遍又一遍地收集事实会非常慢(因为这是我在多个角色中反复出现的问题,而且我不能总是将它们包含在剧本中,而且,如果它们在剧本中,则不需要)。
有什么方法可以检查事实是否已经收集,并仅在需要时将它们收集到角色内部?
python ×8
docx ×2
numpy ×2
python-3.x ×2
python-docx ×2
ansible ×1
directshow ×1
ffmpeg ×1
functools ×1
gcloud ×1
logging ×1
opencv ×1
pdf ×1
python-3.8 ×1
subprocess ×1
wsdl ×1
zeep ×1