You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SMBConnection读取NAS中xlsx文件并导入Pandas DataFrame?

解决SMB读取xlsx文件到Pandas DataFrame的问题

问题原因

你用tempfile.NamedTemporaryFile失败的常见原因:

  • 文件写入后指针停在末尾,Pandas读取时无法获取内容
  • 临时文件默认模式可能不兼容二进制写入操作

方案一:用BytesIO直接读取(推荐,无需磁盘临时文件)

直接用内存缓冲区接收SMB文件内容,跳过磁盘写入步骤,效率更高:

from smb.SMBConnection import SMBConnection
import pandas as pd
from io import BytesIO

# 建立SMB连接(参数保持你原有的正确配置)
conn = SMBConnection('username', 'password', 'client_name', 'server_name')
conn.connect('10.111.111.111')

# 用BytesIO存储文件内容
file_buffer = BytesIO()
# 第一个参数是共享文件夹名,第二个是文件在共享内的路径
conn.retrieveFile('shared_folder_name', 'path/data.xlsx', file_buffer)

# 重置缓冲区指针到文件开头,否则Pandas读不到内容
file_buffer.seek(0)

# 读取为DataFrame
df = pd.read_excel(file_buffer)

# 关闭连接
conn.close()

方案二:修复临时文件的使用方式

如果必须使用磁盘临时文件,需调整文件模式并重置指针:

from smb.SMBConnection import SMBConnection
import tempfile
import pandas as pd
import os

conn = SMBConnection('username', 'password', 'client_name', 'server_name')
conn.connect('10.111.111.111')

# 创建可读写的二进制临时文件,设置delete=False避免自动删除
with tempfile.NamedTemporaryFile(mode='w+b', delete=False) as temp_file:
    # 写入SMB文件内容
    conn.retrieveFile('shared_folder_name', 'path/data.xlsx', temp_file)
    # 重置指针到文件开头
    temp_file.seek(0)
    # 读取为DataFrame
    df = pd.read_excel(temp_file)

# 手动删除临时文件
os.unlink(temp_file.name)

conn.close()

注意事项

  • 确认shared_folder_name和文件路径与你listPath时使用的一致
  • 检查账号对目标xlsx文件有读取权限
  • 大文件建议用临时文件方案,避免内存占用过高

内容的提问来源于stack exchange,提问作者mathilde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:55:19