小编Mar*_*oma的帖子

使用装饰器和直接应​​用函数有什么区别吗?

我最近成为 PyPDF2 的维护者,这是一个相当古老的库,但仍然有一些处理2.4 之前的Python 版本的代码。虽然我想尽快放弃对 3.5 及更早版本的支持,但我看到一些部分我不确定为什么要这样编写。

一个例子是这样的:

代码中的内容:

class Foo(object):
    def a(b, c):
        print(b)
        print(c)

    a = staticmethod(a)
Run Code Online (Sandbox Code Playgroud)

我所期望的是:

class Bar(object):
    @staticmethod
    def a(b, c):
        print(b)
        print(c)
Run Code Online (Sandbox Code Playgroud)

有什么理由使用第一个符号吗?它们严格等价吗?

我已经看到Python 2.4 中引入了装饰器,因此这可能是此类极端遗留代码的一个示例。

python legacy-code python-2.x

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

如何编辑/修改/替换现有 PDF 文件中的文本?

我正在做最后一年的项目,所以我正在开发一个用户可以阅读 PDF 的网站。我添加了一些功能,例如将货币转换为本国货币。我在我的项目中使用flask和pymuPDF,我不知道如何修改pdf中的文本,有人可以帮助我解决这个问题吗?

我听说这里使用 pymuPDF 或 pypdf 可以工作,但我没有找到任何替换文本的解决方案。

python pypdf flask pymupdf

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

如何使用 Python 检查 tar 存档中是否存在文件?

在我将它作为类文件对象获取之前,我想用 Python 验证 tar 存档中给定文件的存在。我已经尝试过isreg(),但可能我做错了什么。

如何使用 Python 检查 tar 存档中是否存在文件?

我试过

import tarfile


tar = tarfile.open("sample.tar", "w")
tar.add("test1.txt")
tar.add("test2.txt")
tar.add("test3.py")
tar.close()

tar = tarfile.open("sample.tar", "r")
tai = tar.tarinfo(name="test3.py")
print(tai.isreg())
print(tai.size())
tar.close()
Run Code Online (Sandbox Code Playgroud)

可能是tai错了。实际上tai.size()总是0。

python tar tarfile

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

如何在Python 2.6的Linux系统上通过pip/virtualenv为Python 2.5安装MySQL-python?

我正在尝试为Django项目建立一个virtualenv.它需要MySQL-python.我正在尝试复制使用Python 2.5的生产环境.我的Ubuntu桌面有Python 2.5.我可以安装Python 2.5 virtualenv virtualenv --python=/usr/bin/python2.5 ....但是,当我尝试时pip install MySQL-python,我得到这个输出:

$ pip install MySQL-python
Downloading/unpacking MySQL-python
  Running setup.py egg_info for package MySQL-python
    warning: no files found matching 'MANIFEST'
    warning: no files found matching 'ChangeLog'
    warning: no files found matching 'GPL'
Installing collected packages: MySQL-python
  Running setup.py install for MySQL-python
    building '_mysql' extension
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -Dversion_info=(1,2,3,'final',0) -D__version__=1.2.3 -I/usr/include/mysql -I/usr/include/python2.5 -c _mysql.c -o build/temp.linux-i686-2.5/_mysql.o -DBIG_JOINS=1 -fno-strict-aliasing -DUNIV_LINUX -DUNIV_LINUX
    In file included …
Run Code Online (Sandbox Code Playgroud)

python pip virtualenv mysql-python

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

当不区分大小写的客户端联系和Web服务器时会发生什么?

我只知道一些文件系统,如FAT,将文件名存储为大写,无论用于创建它们的情况如何.所以不可能将Bishop.png和bishop.png放在同一个文件夹中,是吗?

如果我的Linux服务器在这个文件夹中包含这两个文件,我会创建一个这样的网页:

<html>
    <body>
        <img src="Bishop.png" />
        <img src="bishop.png" />
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

现在这个页面得到Windows 98客户端的请求(我认为他们只有FAT).将Bishop.png显示两次吗?将bishop.png显示两次吗?或者是否会显示两个图像,尽管如果这些文件存储在本地,Windows 98无法区分这些文件?

(我没有任何可能为自己检查这个,因为我只有Linux)

linux windows filesystems

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

如何在std = c99时使用exec/kill?

当我尝试使用exec时:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>


int main()
{
    exec("echo `Hello World`");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

code.c:11: error: implicit declaration of function ‘exec’
make: *** [code.o] Error 1
Run Code Online (Sandbox Code Playgroud)

我必须使用std = c99,我不能添加任何其他编译器标志.我怎样才能使用exec(或同一个电话)?

我猜解决方案对于杀人来说是一样的,不是吗?

c c99

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

无法在Python中解析日期

我需要解析日期和时间.这是我得到的:

import time
a = time.strptime('Apr 28 2013 23:01', "%b %d %y %H:%M")
print a 
Run Code Online (Sandbox Code Playgroud)

但它给了我

Traceback (most recent call last):
  File "/home/aaa/Documents/python_test.py", line 17, in <module>
    a = time.strptime('Apr 28 2013 23:01', "%b %d %y %H:%M")
  File "/usr/lib/python2.7/_strptime.py", line 467, in _strptime_time
    return _strptime(data_string, format)[0]
  File "/usr/lib/python2.7/_strptime.py", line 325, in _strptime
    (data_string, format))
ValueError: time data 'Apr 28 2013 23:01' does not match format '%b %d %y %H:%M'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python python-2.7 datetime-parsing

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

为什么我需要在Haskell中使用'neg square 4.2'的大括号?

我目前正在学习Haskell的99个问题,我.在一个解决方案中看到过.它似乎是数学中已知的常用函数组合:

f ? g
Run Code Online (Sandbox Code Playgroud)

我想确保我已正确理解它并创建了这个示例:

square x = x*x
neg x = (-1)*x

main = do
    -- let result = neg (square 4.1) -- works
    -- let result = square (neg 4.2) -- works
    -- let result = neg $ square 4.3 -- works
    let result = neg square 4.4 -- doesn't work
    -- let result = neg . square 4.5 -- doesn't work
    -- let result = neg . square $ 4.6 -- works
    -- …
Run Code Online (Sandbox Code Playgroud)

haskell

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

如何在Prolog中找到"生成和测试"任务的所有解决方案?

我想用Prolog解决以下问题来改进/测试我的Prolog知识.

找到三个数字X,Y和Z,使得base10中的XYZ等于base9中的ZYX

来源:咖啡时间的挑战

由于我已经用其他语言解决了它,我知道解决方案是:

  • (X,Y,Z)=(0,0,0)
  • (X,Y,Z)=(4,4,5)

我通过生成X,Y,Z(10 ^ 3 = 1000种组合)的所有组合并测试条件是否为真来解决其他语言.

用Prolog测试

使用Prolog,我编写了以下测试程序:

is_solution(X, Y, Z) :- 9>=X, X>=0, 9>=Y, Y>=0, 9>=Z, Z>=0,
                        base10 is (100*X + 10*Y + Z), base9 is (9*9*Z+9*Y+X),
                        base10 = base9.
Run Code Online (Sandbox Code Playgroud)

但似乎有些不对劲:

?- is_solution(0,0,0).
false.

?- is_solution(4,4,5).
false.
Run Code Online (Sandbox Code Playgroud)

生成所有解决方案

我以为我可以通过swipl -f main.prolog以下方式获得解决方案:

is_solution(X,Y,Z).
ERROR: >=/2: Arguments are not sufficiently instantiated
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题

无需用户交互即可打印所有内容

最后,我想有一个可执行脚本,可以打印所有解决方案而无需用户交互.我已经看过findall,我想我必须在这里使用它,但到目前为止我从未(成功)使用它.你能告诉我如何打印这个问题的所有解决方案吗?

prolog

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

tarfile和无效的头错误问题

我有一个tar文件来自http://download.geofabrik.de/africa/botswana-latest.osm.bz2

当我将文件保存到磁盘并使用Python tarfile库提取.osm文件时,我收到无效的标头错误.

有没有办法解决这个错误?

7zip可以打开文件并提取数据而不会出现问题,但我需要编写数据提取脚本.

python tarfile python-2.7

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