Python 如何使用访问Windows共享文件夹

文章目录

  • 引言
  • 前置条件
  • 步骤一:导入必要的模块
  • 步骤二:配置连接参数
  • 步骤三:实例化SMB连接对象并尝试连接
  • 步骤四:列出共享文件夹中的文件与文件夹
  • 步骤五:下载与上传文件(可选)
  • 步骤六:处理连接错误
  • 错误排查指南
  • 结论
  • 引言

    本教程旨在帮助您使用pysmb库,通过SMB(Server Message Block)协议,轻松连接到Windows共享文件夹,并列举其中的文件与文件夹。此外,我们还将简要介绍如何下载和上传文件,以及如何处理可能遇到的连接错误。

    前置条件
    1. 安装pysmb
      请确保您的Python环境中已安装pysmb库。若未安装,可通过pip进行安装:

      pip install pysmb
      
    2. 准备服务器信息
      您需要知道共享文件夹所在服务器的IP地址、NetBIOS名称(或DNS名称)、共享文件夹名称以及您的登录凭据(用户名和密码)。

    步骤一:导入必要的模块

    首先,导入SMBConnection类和NotConnectedError异常。

    from smb.SMBConnection import SMBConnection
    from smb.base import NotConnectedError
    
    步骤二:配置连接参数

    根据服务器的实际情况,设置连接所需的各项参数。

    # 服务器及共享文件夹信息
    server_ip = 'file01.xxtech.com'  # 服务器IP地址
    username = 'your_username'       # 替换为您的用户名
    password = 'your_password'       # 替换为您的密码
    client_machine_name = 'your_client_machine_name'  # 替换为您的客户端机器名称
    server_name = 'FILE01'  # 替换为服务器的NetBIOS名称或DNS名称
    share_name = 'File'     # 共享文件夹名称
    
    步骤三:实例化SMB连接对象并尝试连接

    使用SMBConnection类创建一个SMB连接对象,并尝试与服务器建立连接。

    # 创建SMB连接对象
    conn = SMBConnection(username, password, client_machine_name, server_name, use_ntlm_v2=True)
    
    try:
        # 连接到服务器
        conn.connect(server_ip, 445)  # 尝试通过445端口连接
        print("已成功连接到服务器。")
    
    步骤四:列出共享文件夹中的文件与文件夹

    连接成功后,即可列出共享文件夹中的文件与文件夹。

        # 列出共享文件夹中的文件与文件夹
        files_and_dirs = conn.listPath(share_name, '/')
        for file_or_dir in files_and_dirs:
            print(file_or_dir.filename)
    
    步骤五:下载与上传文件(可选)

    除了浏览文件与文件夹外,您还可以下载和上传文件。以下是相关示例代码:

        # 下载文件的函数
        def download_file(remote_path, local_path):
            with open(local_path, 'wb') as f:
                conn.retrieveFile(share_name, remote_path, f)
        
        # 上传文件的函数
        def upload_file(local_path, remote_path):
            with open(local_path, 'rb') as f:
                conn.storeFile(share_name, remote_path, f)
    
    步骤六:处理连接错误

    在连接过程中,可能会遇到各种错误。以下是处理这些错误的建议:

  • ConnectionRefusedError:这通常意味着服务器拒绝了连接请求。请检查服务器是否正在运行、IP地址和端口是否正确、防火墙设置是否允许连接、SMB服务是否启动以及网络是否畅通。
  • NotConnectedError:当尝试在未建立连接的情况下执行操作时,会抛出此异常。
  • 其他异常:对于其他可能的异常,请打印错误消息并进行相应的调查。
  • except NotConnectedError:
        print("无法连接到服务器。请检查服务器地址、端口和凭据。")
    except Exception as e:
        print(f"发生错误:{e}")
    finally:
        # 断开连接(如果已连接)
        try:
            conn.close()
        except NotConnectedError:
            # 如果连接从未成功建立,则忽略关闭错误
            pass
    
    错误排查指南

    若遇到连接问题,请按照以下步骤进行排查:

    1. 确认服务器状态:确保服务器正在运行且可接受连接。
    2. 检查网络连接:使用ping命令或其他网络工具测试服务器是否可达。
    3. 审查防火墙与SMB配置:确保服务器的防火墙允许来自您客户端的445端口流量,并检查SMB配置是否正确。
    4. 验证端口与IP地址:确认您使用的是正确的端口和IP地址。
    5. 尝试其他连接方式:从其他客户端或使用不同工具(如Windows资源管理器)尝试连接服务器,以验证其是否确实可接受连接。
    6. 查看服务器日志:服务器日志文件可能包含有关连接被拒绝原因的详细信息。
    7. 联系IT支持:如果问题仍未解决,请联系您的网络管理员或IT支持团队寻求帮助。
    结论

    通过遵循本教程,您应能使用pysmb库成功连接到Windows共享文件夹,并浏览其中的文件与文件夹。同时,您还学会了如何下载和上传文件,并掌握了处理连接错误的技巧。

    作者:蜡笔小新星

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python 如何使用访问Windows共享文件夹

    发表回复