使用Python批量导入Excel到SQL Server时遇循环TypeError报错求助
解决Python批量上传xlsx至SQL Server的TypeError问题
错误原因
你的代码中folder = os.chdir(r"C:\Users\800061199\Desktop\Teste_Base")这一行存在核心问题:os.chdir()函数仅负责切换当前工作目录,没有返回值(返回None),导致folder变量被赋值为None。后续调用os.listdir(folder)时传入了None,触发TypeError: expected str, bytes or os.PathLike object, not NoneType。
修正方案
方案1:直接使用文件夹路径(推荐)
无需切换目录,直接用绝对路径字符串操作,避免依赖当前工作目录的状态:
import os import pandas as pd # 直接存储文件夹绝对路径 folder = r"C:\Users\800061199\Desktop\Teste_Base" # 筛选文件夹下的xlsx文件 farqs = [arq for arq in os.listdir(folder) if arq.endswith('.xlsx')] for arq in farqs: # 拼接完整文件路径 file_path = os.path.join(folder, arq) df = pd.read_excel(file_path) # 用文件名作为SQL表名(去掉后缀) table = os.path.splitext(arq)[0] df.to_sql(table, engine, if_exists='replace', index=False)
方案2:先切换目录再操作
如果需要切换到目标目录,将os.chdir()和变量赋值分开:
import os import pandas as pd # 单独执行目录切换,不赋值给变量 os.chdir(r"C:\Users\800061199\Desktop\Teste_Base") # os.listdir()不传参数默认读取当前工作目录 farqs = [arq for arq in os.listdir() if arq.endswith('.xlsx')] for arq in farqs: # 当前目录下直接读取文件 df = pd.read_excel(arq) table = os.path.splitext(arq)[0] df.to_sql(table, engine, if_exists='replace', index=False)
关键提示
os.chdir()仅改变当前工作目录,不会返回任何路径值,不能用它来获取文件夹路径。- 优先使用方案1的绝对路径写法,代码更健壮,不易因后续目录变更出现问题。
内容的提问来源于stack exchange,提问作者William Soares
相关产品推荐
相关产品推荐

