簡體   English   中英

使用 Python 遞歸地從共享文件夾中獲取所有文件

[英]Recursively fetch all files from shared folder using Python

我已經使用 Pywin32 建立了與 Windows 共享驅動器的連接

import win32net
data = {
    'remote': r"\\server\shared",
    'local': '',
    'username': 'username',
    'password': 'password'
}

win32net.NetUseAdd(None, 2, data)

我需要列出共享文件夾中存在的所有文件,類似於os.walk(path)

有哪些可能的方法可以做到這一點?

檢查[ME.TimGolden]: Python for Win32 Extensions Help
((官方)由[GitHub] 引用:mhammond/pywin32 - Python for Windows (pywin32) ExtensionsPython wrapper ove WinAPI s)。

win3.net.NetUseAdd包裝[MS.Learn}: NetUseAdd function (lmuse.h)
[MS.Learn]:USE_INFO_2 結構 (lmuse.h) (由[ME.TimGolden] 包裝:PyUSE_INFO_2 Object - 您使用的)指出:

ui2_local

類型: LMSTR

指向包含本地設備名稱(例如,驅動器 E 或 LPT1)的字符串的指針被重定向到共享資源。 常量 DEVLEN 指定字符串中的最大字符數。 該成員可以是NULL 有關詳細信息,請參閱以下備注部分。

您所要做的就是:

  1. 提供一個本地名稱(未使用)

  2. 連接成功后,使用它(就像任何“常規”本地驅動器一樣)

代碼00.py

#!/usr/bin/env python

import os
import sys

import win32net as wnet


def main(*argv):
    local_drive = "y:"
    data = {
        "remote": r"\\localhost\share_cfati",
        "local": local_drive,
        "username": "user",  # @TODO - cfati: Modified to hide sensitive data
        "password": "***",  # @TODO - cfati: Modified to hide sensitive data
    }

    try:
        res = wnet.NetUseAdd(None, 2, data)
        #print(res)
    except:
        print("Error adding connection:", sys.exc_info())
        return -1

    print("Items in the shared folder:\n{:}".format(os.listdir(local_drive)))


if __name__ == "__main__":
    print("Python {:s} {:03d}bit on {:s}\n".format(" ".join(elem.strip() for elem in sys.version.split("\n")),
                                                   64 if sys.maxsize > 0x100000000 else 32, sys.platform))
    rc = main(*sys.argv[1:])
    print("\nDone.\n")
    sys.exit(rc)

Output :

 [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q075267137]> sopr.bat ### Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ### [prompt]> [prompt]>.net share Share name Resource Remark ------------------------------------------------------------------------------- ADMIN$ C:\WINDOWS Remote Admin C$ C:\ Default share E$ E:\ Default share F$ F:\ Default share G$ G:\ Default share H$ H:\ Default share IPC$ Remote IPC L$ L:\ Default share M$ M:\ Default share N$ N:\ Default share share_cfati L:\Share\cfati share_pub_ro L:\Share\pub_ro share_pub_rw L:\Share\pub_rw The command completed successfully. [prompt]> [prompt]>.net use New connections will not be remembered. There are no entries in the list. [prompt]> [prompt]> "e:\Work\Dev\VEnvs\py_pc064_03.10_test0\Scripts\python.exe"./code00.py Python 3.10.9 (tags/v3.10.9:1dd9be6, Dec 6 2022, 20:01:21) [MSC v.1934 64 bit (AMD64)] 064bit on win32 Items in the shared folder: ['.DS_Store', 'a.py', 'b', 'c', 'code00.py', 'commander.dmg', 'copy_sdk-aars.sh', 'cstrike1.6.zip', 'dedus', 'doublecmd.xml', 'ifm', 'pula', 'py2713.tgz'] Done. [prompt]> [prompt]>.net use New connections will not be remembered. Status Local Remote Network ------------------------------------------------------------------------------- OK Y: \\localhost\share_cfati Microsoft Windows Network The command completed successfully. [prompt]> [prompt]>.net use /delete y: y: was deleted successfully. [prompt]> [prompt]>.net use New connections will not be remembered. There are no entries in the list.

注意事項

  • 這相當於Win UI中的Map.network drive...功能

  • 通常,當資源用完后,最好釋放它。 我刪除了連接( net use /delete y: ),但這也可以通過 win3.net.NetUseDel* 從代碼中完成

  • 文件(文件夾)瀏覽本身不是這個問題的一部分(至少我不認為是),因為它是一個不同的(獨立的)主題。 檢查[SO]:如何列出目錄的所有文件? (@CristiFati 的回答)以深入分析如何做

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM