首页 > 解决方案 > 如何在熊猫中同时读取多个csv文件

问题描述

嗨,我试图让用户选择三个文件,然后在用户选择并按下打开后将它们读入程序。我尝试了以下代码,但收到以下错误消息。我希望它在打开后打印出文件名,这在我有代码一次打开一个文件时有效,但我希望它也适用于多个文件,只是不确定它是否可能。

> 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()

标签: pythonpandas

解决方案


tkinter.filedialog.askopenfilenames的文档非常薄,但考虑到它可以让您选择多个文件,最好选择返回是某种集合。果然,如果你移到失败的行print(filename) 之上,它表明 a tupleof filenames 被返回。因此,遍历这些名称以创建数据框。

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)

推荐阅读