【问题标题】:Searching a directory for folders and files using python使用python在目录中搜索文件夹和文件
【发布时间】:2013-09-22 12:44:31
【问题描述】:

我的目录结构如下所示。

         MainFolder 
             |
           [lib] 
         /   |   \
       [A]  [B]  [C] -- file1.so 
        |     |         file2.so
   file1.so   file1.so
   file2.so   file2.so    

我正在尝试在该结构中查找有时可能不存在的“lib”文件夹。所以我使用以下内容来检查“lib”文件夹是否存在:

   if os.path.isdir(apkLocation + apkFolder + '/lib/'):

如果存在 lib 文件夹,则继续搜索“lib”中的文件夹。我必须存储文件夹 A、B 和 C 的名称,并查找以“.so”结尾的文件,其路径应存储为 /lib/A/file1.so、/lib/A/file2.so 等开。

 if os.path.isdir(apkLocation + apkFolder + '/lib/'):
   for root, dirs, files in os.walk(apkLocation + apkFolder):
            for name in files:
                if name.endswith(("lib", ".so")):
                    print os.path.abspath(name) 

这让我出局

                  file1.so
                  file2.so
                  file1.so
                  file2.so
                  file1.so
                  file2.so

期望的输出:

           /lib/A/file1.so
           /lib/A/file2.so
           /lib/B/file1.so
           /lib/B/file2.so
           /lib/C/file1.so
           /lib/C/file2.so

文件夹A、B、C也要分开保存。

【问题讨论】:

  • apkLocation + apkFolder + '/lib/' - 不要添加路径段 - 使用 os.path.join(apkLocation, apkFolder, 'lib')

标签: python path operating-system directory


【解决方案1】:

您必须加入当前目录和名称才能获得文件的绝对路径:

for root, dirs, files in os.walk(apkLocation + apkFolder):
    for name in files:
        if name.endswith(("lib", ".so")):
            os.path.join(root, name)

这里也记录了http://docs.python.org/3/library/os.html#os.walk

【讨论】:

  • 那行得通:) 我如何检索文件夹 A、B 和 C 而不是在 os.path.join(root,name) 的输出上玩弄字符串函数?有什么路径函数可以做到这一点?
  • 这样做了 os.path.join(root,name).replace(apkLocation+apkFolder+'/lib','')
  • 您正在寻找 os.path.split() 和 os.path.dirname()。这一切都有据可查。
【解决方案2】:

您首先需要加入当前目录和文件名以获得文件的完整路径: 对于 os.walk(apkLocation + apkFolder) 中的根目录、目录和文件: 对于文件中的名称: 如果 name.endswith(("lib", ".so")): os.path.join(root, name)

【讨论】:

    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 2011-04-23
    相关资源
    最近更新 更多