嗨,我试图让用户选择三个文件,然后在用户选择并按下打开文件后,将它们读入程序。我尝试了以下代码,但收到以下错误消息。我希望它打印出打开后的文件名,当我有一次一次打开一个文件的代码时,它可以工作,但是我希望它能同时处理多个文件,只是不确定是否可以。
> Exception in Tkinter callback Traceback (most recent call last):
> File "C:\Users\John\anaconda3\lib\tkinter\__init__.py", line 1883, in
> __call__
> return self.func(*args) File "<ipython-input-7-0367338b5787>", line 24, in file_opener
> read_file = pd.read_csv (filename, "r","w",error_bad_lines=False, engine="python") File
> "C:\Users\John\anaconda3\lib\site-packages\pandas\io\parsers.py", line
> 676, in parser_f
> return _read(filepath_or_buffer, kwds) File "C:\Users\John\anaconda3\lib\site-packages\pandas\io\parsers.py", line
> 430, in _read
> fp_or_buf, _, compression, should_close = get_filepath_or_buffer( File "C:\Users\John\anaconda3\lib\site-packages\pandas\io\common.py",
> line 200, in get_filepath_or_buffer
> raise ValueError(msg) ValueError: Invalid file path or buffer object type: <class 'tuple'>
我的代码如下。
import pandas as pd
import tkinter as tk
import csv
import json
import numpy as np
import re
import matplotlib.pyplot as plt
import fileinput
from tkinter import filedialog
from tkinter import messagebox
from tkinter import Menu
root = tk.Tk()
root.title("Data Tools 101")
root.geometry("650x700")
def file_opener():
global read_file
filename = filedialog.askopenfilenames(initialdir = "/", title = "Open files", multiple=True)
read_file = pd.read_csv (filename, "r","w",error_bad_lines=False, engine="python")
df = pd.read_csv('Inspections.csv')
print(filename)
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label='Open File',command = file_opener)
filemenu.add_separator()
menubar.add_cascade(label='File', menu=filemenu)
root.config(menu=menubar)
root.mainloop()
tkinter.filedialog.askopenfilenames的文档非常薄,但是考虑到它允许您选择多个文件,因此可以肯定的是,返回值是某种类型的集合。果然,如果您移至失败行print(filename)
上方,则表明tuple
已返回文件名。因此,循环遍历这些名称以创建数据框。
import json
import numpy as np
import re
import matplotlib.pyplot as plt
import fileinput
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
from tkinter import Menu
import pandas as pd
root = tk.Tk()
root.title("Data Tools 101")
root.geometry("650x700")
def file_opener():
global read_file
filenames = filedialog.askopenfilenames(initialdir = "/", title = "Open files", multiple=True)
dfs = []
for filename in filenames:
print("opening", filename)
dfs.append(pd.read_csv (filename, error_bad_lines=False, engine="python"))
print(dfs[-1])
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label='Open File',command = file_opener)
filemenu.add_separator()
menubar.add_cascade(label='File', menu=filemenu)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句