小编Ofe*_*dan的帖子

使用纯python将docx转换为pdf(在linux上,没有libreoffice)

我正在处理一个试图开发网络应用程序的问题,其中一部分将上传的docx文件转换为pdf文件(经过一些处理后).使用python-docx和其他方法,我不需要安装word的Windows机器,甚至linux上的libreoffice,用于大多数处理(我的web服务器是pythonanywhere - linux但没有libreoffice,没有sudoapt 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)

python pdf docx pythonanywhere python-docx

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

zeep-禁用警告“强制soap:地址位置到HTTPS”

我正在使用该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的明文)

python logging wsdl python-3.x zeep

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

如何在python 3.8中安装opencv-python

我在 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 版本,我该如何解决这个问题?

python opencv python-3.x python-3.8

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

为什么 functools.partial 没有被检测为 types.FunctionType?

在我的代码中,我需要检测变量是否是函数并对其执行一些操作。

一切都很顺利,直到我现在使用创建了一个部分函数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

python functools

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

通过命令行将预留IP分配给实例(Google云)

我正在使用Google云计算引擎,在它上面有4个运行Ubuntu 18.04的实例。我还在“ VPC网络->外部IP地址”中保留了一个静态IP地址。

现在,我想以编程方式将该IP地址每次分配给不同的实例之一。在Google Cloud控制台中,这很容易,只需单击保留IP旁边的“更改”,然后将“分配给”我想要的任何实例。但是,如何通过命令行使用gcloud

我已经研究gcloudgcloud beta命令,但找不到它。有什么解决办法吗?

gcloud

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

ffmpeg通过python子进程无法找到摄像头

奇怪的问题,我使用此命令通过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 subprocess directshow ffmpeg

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

删除 docx 文件中的所有图像

我搜索了python-docx其他软件包的文档以及堆栈溢出,但找不到如何docx使用 python 从文件中删除所有图像。

我的具体用例:我需要将数百个 Word 文档转换为“草稿”格式以供客户查看。这些草稿应与原始文档相同,但必须删除/编辑其中的所有图像。

抱歉,没有提供我尝试过的示例,我尝试过的是数小时的研究,但没有提供任何信息。我发现这个问题是关于如何从Word文件中提取图像,但这并没有从实际文档中删除它们:Extract pictures from Word and Excel with Python

从那里和其他来源我发现docx文件可以被读取为简单的zip文件,我不知道这是否意味着可以在没有图像的情况下“重新压缩”而不影响文件的完整性docx(编辑:只需删除图像即可,但python-docx由于缺少对图像的引用而无法继续使用此文件),但认为这可能是解决方案的路径。

有任何想法吗?

python docx python-docx

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

PIL.Image.fromarray 在 np.reshape 后产生扭曲的图像

我有一个形状为 (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太天真并且弄乱了数据,但我无法解决这个问题。欢迎任何想法。

python numpy python-imaging-library

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

numpy 中的交替值

试图让我的代码更加高效和可读,但我陷入了困境。假设我想构建一个类似棋盘的东西,在 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)

python numpy

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

如何仅在需要时收集角色内部的 ansible_facts ?

我有一个示例角色,我根据操作系统和包管理器安装一些包:

# 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 在角色中收集这些事实,但是一遍又一遍地收集事实会非常慢(因为这是我在多个角色中反复出现的问题,而且我不能总是将它们包含在剧本中,而且,如果它们在剧本中,则不需要)。

有什么方法可以检查事实是否已经收集,并仅在需要时将它们收集到角色内部?

ansible ansible-facts

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