28

我想在我的应用程序中实现一个功能,用于上传和操作 WebDAV 服务器上的文件。我正在寻找一个成熟的 Python 库,它可以提供类似于os.*用于处理远程文件的模块的界面。谷歌搜索已经发现了一些 Python 中的 WebDAV 选项,但我想知道这些天哪些更广泛使用。

4

7 回答 7

56

遗憾的是,对于这个肯定不止一个人感兴趣的问题(“使用什么 Python webdav 库?”),接受了不相关的答案(“不要使用 Python webdav 库”)。好吧,Stackexchange 上的常见问题。

对于将要寻找真正答案的人,并考虑到原始问题中的要求(类似于“os”模块的简单 API),我可能会建议easywebdav,它具有非常简单的 API,甚至是漂亮而简单的实现,提供上传/下载和很少的文件/目录管理方法。由于实现简单,目前还不支持目录列表,但是已经提交了bug,作者打算添加。

于 2012-08-30T09:32:22.917 回答
11

我刚刚有类似的需求,最终测试了一些 Python WebDAV 客户端以满足我的需求(从 WebDAV 服务器上传和下载文件)。以下是我的经验总结:

1)对我有用的是python-webdav-lib

文档不多,但快速浏览一下代码(特别是示例)就足以弄清楚如何让它为我工作。

2) PyDAV 0.21(我发现的最新版本)不适用于 Python 2.6,因为它使用字符串作为异常。我没有尝试解决这个问题,期待以后会有更多的不兼容。

3) davclient 0.2.0。我查看了它,但没有进一步探索,因为文档没有提到我正在寻找的 API 级别(文件上传和下载)。

4) Python_WebDAV_Library-0.3.0。好像没有上传功能。

于 2011-08-01T12:39:09.760 回答
3

显然您正在寻找 WebDAV 客户端库。

不确定如何产生大量点击,似乎以下 2 个看起来相关:

于 2009-10-09T18:06:36.767 回答
3
import easywebdav

webdav = easywebdav.connect(
    host='dav.dumptruck.goldenfrog.com',
    username='_snip_',
    port=443,
    protocol="https",
    password='_snip_')

_file = "test.py"

print webdav.cd("/dav/")
# print webdav._get_url("")
# print webdav.ls()
# print webdav.exists("/dav/test.py")
# print webdav.exists("ECS.zip")
# print webdav.download(_file, "./"+_file)
print webdav.upload("./test.py", "test.py")
于 2014-05-12T14:37:48.310 回答
1

我对这些库中的任何一个都没有经验,但是 Python 包索引(“PyPi”)列出了很多 webdav 模块

于 2009-10-09T02:16:07.040 回答
0

安装:

$ sudo apt-get install libxml2-dev libxslt-dev python-dev
$ sudo apt-get install libcurl4-openssl-dev python-pycurl
$ sudo easy_install webdavclient

例子:

import webdav.client as wc

options = {
  'webdav_hostname': "https://webdav.server.ru",
  'webdav_login': "login",
  'webdav_password': "password"
}

client = wc.Client(options)

client.check("dir1/file1")
client.info("dir1/file1")

files = client.list()
free_size = client.free()

client.mkdir("dir1/dir2")
client.clean("dir1/dir2")

client.copy(remote_path_from="dir1/file1", remote_path_to="dir2/file1")
client.move(remote_path_from="dir1/file1", remote_path_to="dir2/file1")

client.download_sync(remote_path="dir1/file1", local_path="~/Downloads/file1")
client.upload_sync(remote_path="dir1/file1", local_path="~/Documents/file1")
client.download_async(remote_path="dir1/file1", local_path="~/Downloads/file1", callback=callback)
client.upload_async(remote_path="dir1/file1", local_path="~/Documents/file1", callback=callback)

link = client.publish("dir1/file1")
client.unpublish("dir1/file1")

链接:

于 2014-10-25T13:26:19.110 回答
-2

我不知道具体的,但根据您的平台,通过文件系统挂载和访问 WebDAV 提供的文件可能更简单。有davfs2和一些操作系统,比如 Mac OS X,内置了 WebDAV 文件系统支持。

于 2009-10-09T02:00:54.410 回答