【问题标题】:Loop Directory (folder and Subfolder in Python app)循环目录(Python 应用程序中的文件夹和子文件夹)
【发布时间】:2022-01-13 17:20:23
【问题描述】:

我正在尝试让一个应用程序循环遍历目录(文件夹和子目录)以搜索多个扩展名或关键字,并在动态框架中输出列表但代码(如果没有找到则返回零)。

当前代码在输入多个扩展名(或关键字)时失败或在框架的单行中分组多个结果时失败。

我在调试下面发布的代码时需要帮助。

谢谢

   from st_aggrid import AgGrid
    import streamlit as st
    import pandas as pd
    import os

    office= st.text_input("Enter your Office : ")
    path= st.text_input("Enter directory path to search : ")
    extensions= st.text_input("Enter the File Extension :")

    file_names = [fn for fn in os.listdir(path) if any(fn.endswith(ext) for ext in extensions)]
    df = pd.DataFrame({'Office' : [office],'Directory' : [path],'File_Name' : file_names})
    AgGrid(df, fit_columns_on_grid_load=True)

【问题讨论】:

    标签: python pandas dataframe streamlit


    【解决方案1】:

    你的代码有一些问题:

    1. 当使用st.text_input 获取扩展名时,返回值是一个字符串而不是扩展名列表。为了解决这个问题,只需要求用户输入以逗号分隔的扩展名并将字符串拆分以获取扩展名列表。

      extensions= st.text_input("Enter the File Extension (Seperated with comma):").split(",")
      
    2. 当您第一次运行 Streamlit 代码时,officepathextensions 的值是 None,导致 FileNotFoundError,因此我们需要运行代码以循环遍历目录并仅在以下情况下显示文件这些值不是无。

       if office and path and extensions:
           # code
      
    3. 搜索文件不是递归的,因此我们需要更改它以获取子文件夹文件,我们也可以使用此问题How to do a recursive sub-folder search and return files in a list? 中建议的解决方案来执行此操作。我们还需要检查文件是否有扩展名或关键字。

    把它们放在一起:

    import os
    import streamlit as st
    import pandas as pd
    from st_aggrid import AgGrid
    
    office= st.text_input("Enter your Office : ")
    path= st.text_input("Enter directory path to search : ")
    extensions= st.text_input("Enter the File Extension (Seperated with comma):").split(",")
    
    if office and path and extensions:
      file_names = []
      file_names_ext = []
      dirs = []
      for dp, dn, filenames in os.walk(path):
        for fn in filenames:
          for ext in extensions:
            if ext in fn:
              dirs.append(dp)
              file_names.append(os.path.join(dp, fn))
              file_names_ext.append(ext)
              break
    
      df = pd.DataFrame({'Office': office , 'Directory': dirs, 'File_Name' : file_names, 'Term': file_names_ext})
      AgGrid(df, fit_columns_on_grid_load=True)
    

    例如,如果我有以下文件夹结构:

    这些是工作代码的输出示例:

    【讨论】:

    • 非常感谢!如果我想在指定目录中的文件完整路径中搜索特定的关键字字符串系列(逗号分隔),@RoseGod 也可以吗?最后,如何在数据框中的新列上添加相关的关键字字符串或文件扩展名,以了解为什么将文件标记为待审?
    • @Pynew 我更新了代码以检索具有特定关键字字符串的所有文件并将关键字字符串添加为新列。此外,如果此或任何答案解决了您的问题,请通过单击复选标记考虑accepting。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
    • 感谢您的帮助。我已经接受了。最后一个问题,如何将搜索修改为不区分大小写? @玫瑰神
    • @Pynew 将以下行 if ext in fn: 更改为 if ext.lower() in fn.lower(): 应该解决区分大小写的问题。
    • 我发布了一个新问题。我希望你能帮忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多