在python中导入多个文件

曼努埃尔·奥利维拉

我正在尝试创建一个脚本,用户可以在其中选择文件夹中的 1 个或所有文件(以“模仿” Matlabuigetfile的多选打开)。之后,脚本会询问用户是否要从另一个位置导入数据,然后导入 1 或所有例程继续。

该脚本的任务只是检索多选选项的路径和文件名。它是在使用 Windows 10 的 PC 上编写的,使用 Python 3.6 和 Spyder 作为 Anaconda Distro 中的 IDE。

到目前为止,我有这个:

def import_multiple_files(): 
    # Similar to UIGETFILE
    import tkinter as tk
    from tkinter import filedialog
    from tkinter import messagebox
    import glob


    root = tk.Tk()
    root.withdraw()
    root.attributes("-topmost", True)
    root.lift()
    file_location = filedialog.askopenfilename()
    a=file_location.split('/')
    path=[]
    for i in range(0,len(a)-1):
        path.append(a[i])

    path= "/".join(path)    
    filename=a[len(a)-1]

    # Questions the user

    qst=messagebox.askyesno("Multiple Import","Do you want to import all .txt files in this folder?")
    allFiles=[]

    if qst==True:

    # Gets all .txt files in path FOLDER

        b=glob.glob(path + "/*.txt") # glob. lists the filename and path

        allFiles.append(b)
    else: 
        b=(path + "/"+ filename)
        allFiles.append(b)

    qst=messagebox.askyesno("Multiple Import","Do you want to import more DATA?")   


    finish=0    
    while finish==0:
        if qst==True:

        # deletes all variables except "AllFILES" (location of all files to import)
            del(root,file_location,a,path,qst,b)

            root = tk.Tk()
            root.withdraw()
            root.attributes("-topmost", True)
            root.lift()
            file_location = filedialog.askopenfilename()
            a=file_location.split('/')
            path=[]
            for i in range(0,len(a)-1):
                path.append(a[i])

            path= "/".join(path)    
            filename=a[len(a)-1]

            qst=messagebox.askyesno("Multiple Import","Do you want to import all .txt files in this folder?")

            if qst==True:
                # Gets all .txt files in path FOLDER
                b=glob.glob(path + "/*.txt")
                allFiles.append(b)
                qst=messagebox.askyesno("Multiple Import","Do you want to import more DATA?") 
            else: 
                b=(path + "/"+ filename)
                allFiles.append(b)
                qst=messagebox.askyesno("Multiple Import","Do you want to import more DATA?") 

        else:
            finish=1

    return(allFiles)


file_location=import_multiple_files()

脚本/函数返回完整路径和文件名,但是,由于某些原因,某些名称带有双反斜杠

例如,

file_location
[['C:/Users/user/Desktop/New Folder (2)\\1.txt',
  'C:/Users/user/Desktop/New Folder (2)\\2.txt',
  'C:/Users/user/Desktop/New Folder (2)\\3.txt'],
 ['C:/Users/user/Desktop/New Folder (3)/1.txt']] # For this last file, I did not select the option of importing all files.

任何人都可以看一下这个脚本,看看是否有问题,或者这是否只是 Python 显示内容的方式。

先感谢您!

万迪

\\只是 Python 显示转义反斜杠的方式。\在许多上下文中用于表示新行 ( \n)、制表符 ( \t) 等。所以\\只表示反斜杠后出现的内容不是这些特殊字符之一。Python 会理解你混合使用的正斜杠和反斜杠,但如果你想让所有内容一致显示,你可以使用[os.path.abspath(d) for d in my_list].

此外,如果您想避免创建列表列表,看起来您应该使用extend而不是append

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章