Python运行报错NameError: filepath未定义 同目录CSV导入MongoDB问题咨询
问题根因
你代码里的核心问题有两个:
def import_content(filepath):这行被你注释掉了,原本属于函数内部的代码直接暴露在全局作用域执行- 全局作用域执行到
file_res = (os.path.join(cdir, filepath))这行时,filepath变量还没有被定义(你定义filepath的代码在更靠后的if __name__ == "__main__"块中,执行顺序靠后)
修复方案
取消函数定义的注释,把原本属于函数内的代码都缩进对齐到函数作用域下,同时替换pymongo已废弃的旧方法:
# imports import csv import json import dash import pandas as pd import sys, getopt, pprint, os import pymongo import numpy as np import dash_leaflet as dl import plotly.express as px import plotly.graph_objs as go import base64 import os from dash import dcc from dash import html from dash import dash_table from pprint import pprint from bson.objectid import ObjectId from bson.json_util import dumps from pymongo import MongoClient from dash.dependencies import Input, Output, State from dbCRUD import BidSystem ##### THIS SECTION ONLY NEEDED FOR INITIAL SETUP ##### # Setup to import the csv file into mongodb through mongodb atlas def import_content(filepath): # Provide the mongodb atlas url to connect python to mongodb using pymongo and create a connection using MongoClient client = pymongo.MongoClient("mongodb+srv://myAdminUser:abcd1234@cluster0.zxsdm.mongodb.net/mongodb_eBids?retryWrites=true&w=majority") # details for the database and collection names mng_db = client['mongodb_eBids'] collection_name = 'eBids' db_cm = mng_db[collection_name] #setup to pull the data from csv file and insert into mongodb as json data cdir = os.path.dirname(__file__) file_res = os.path.join(cdir, filepath) data = pd.read_csv(file_res) data_json = json.loads(data.to_json(orient='records')) # 替换废弃的remove、insert方法 db_cm.delete_many({}) db_cm.insert_many(data_json) if __name__ == "__main__": filepath = 'eBids.csv' import_content(filepath) ###### THIS SECTION ONLY NEEDED FOR INITIAL SETUP #####
额外注意事项
- 确认你的CSV文件名称确实为
eBids.csv,和运行的py脚本放在同一文件夹下 - 如果运行时依然提示文件找不到,可以把
cdir = os.path.dirname(__file__)替换为cdir = os.getcwd()测试,避免部分运行环境下__file__变量失效 - 生产环境不要硬编码数据库连接的账号密码,建议通过环境变量读取
内容的提问来源于stack exchange,提问作者bahb
相关产品推荐
相关产品推荐

