首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python中导入多个文件

在python中导入多个文件
EN

Stack Overflow用户
提问于 2017-08-13 17:38:05
回答 2查看 8.9K关注 0票数 2

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

脚本的任务就是检索多选择选项的路径和文件名。它是使用Windows 10在PC上编写的,Python 3.6和Spyder是Anaconda地区的IDE。

到目前为止我有这样的想法:

代码语言:javascript
运行
复制
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()

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

例如,

代码语言:javascript
运行
复制
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显示东西的方式。

提前谢谢你!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-13 17:52:15

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

此外,如果要避免创建列表列表,则应该使用extend而不是append

票数 0
EN

Stack Overflow用户

发布于 2017-08-15 08:43:18

这是“最终”版本

谢谢大家!

此函数检索文件夹中1个或所有文件的文件位置。

代码语言:javascript
运行
复制
def import_multiple_files(): 
    # 'similar' to UIGETFILE
    import tkinter as tk
    from tkinter import filedialog
    from tkinter import messagebox
    import glob
    import os

    # Creates a Tkinter window to search for a file
    root = tk.Tk()
    root.withdraw()
    root.attributes("-topmost", True)
    root.lift()
    file_location = filedialog.askopenfilename()
    a=file_location.split('/')

    # Separates the file location into path and file name
    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")

        allFiles.extend(b)
    else: 
        b=[(path + "/"+ filename)]
        allFiles.extend(b)

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

    # Allows the user to import as many files from as as many folders as he/she chooses     
    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.extend(b)
                qst=messagebox.askyesno("Multiple Import","Do you want to import more DATA?") 
            else: 
                b=[(path + "/"+ filename)]
                allFiles.extend(b)
                qst=messagebox.askyesno("Multiple Import","Do you want to import more DATA?") 

        else:
            finish=1

        b=[os.path.abspath(d) for d in allFiles]
    # Returns all file locations    
    return(b)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45663115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档