如何实现用户从任意目录上传CSV文件到MongoDB的功能
解决方案
你想要的动态读取任意位置CSV的需求不需要用到tempfile模块,tempfile主要用于生成程序运行时临时存储的文件/目录,直接获取用户指定的文件路径即可,以下是两种适合初学者的实现方案:
方案1:命令行传参实现
运行脚本时直接把CSV文件路径作为参数传入,无需修改代码,只要运行时指定路径即可读取任意位置的文件。
修改后代码如下:
import pandas as pd from pymongo import MongoClient import sys # 校验参数是否传入 if len(sys.argv) < 2: print("请在运行时传入CSV文件路径,示例:python upload.py C:\测试\文件.csv") exit() csv_path = sys.argv[1] client = MongoClient("mongodb+srv://xxx:xxx@bycardb.lrp4p.mongodb.net/myFirstDatabase?retryWrites=true&w=majority") print('connected') db = client['dbycar'] collection = db['users'] data = pd.read_csv(csv_path) data.reset_index(inplace=True) data_dict = data.to_dict("records") collection.insert_many(data_dict) print("上传完成")
使用方法:把脚本保存为upload.py,打开终端运行时在后面加上你的CSV文件完整路径即可,例如:python upload.py D:\下载\测试.csv
方案2:图形化文件选择框实现
运行脚本后会弹出系统的文件选择窗口,直接点选要上传的CSV文件即可,不需要手动输入路径,对新手更友好。
修改后代码如下:
import pandas as pd from pymongo import MongoClient import tkinter as tk from tkinter import filedialog # 初始化tk窗口并隐藏主窗口 root = tk.Tk() root.withdraw() # 弹出文件选择框,限制只能选CSV文件 csv_path = filedialog.askopenfilename( title="选择要上传的CSV文件", filetypes=[("CSV文件", "*.csv")] ) # 校验是否选中了文件 if not csv_path: print("未选择任何文件,程序退出") exit() client = MongoClient("mongodb+srv://xxx:xxx@bycardb.lrp4p.mongodb.net/myFirstDatabase?retryWrites=true&w=majority") print('connected') db = client['dbycar'] collection = db['users'] data = pd.read_csv(csv_path) data.reset_index(inplace=True) data_dict = data.to_dict("records") collection.insert_many(data_dict) print("上传完成")
使用方法:直接运行脚本,在弹出的文件选择窗口中找到你要上传的CSV文件选中即可,不管文件在电脑哪个位置都能读取。
内容的提问来源于stack exchange,提问作者João Vitor
相关产品推荐
相关产品推荐

