如何使用Python处理从一个子文件夹到每个目录中另一个子文件夹的文件?

约瑟夫

我在桌面上有一个基本的文件/文件夹结构,其中“测试”文件夹包含“文件夹1”,而该文件夹又包含2个子文件夹:

  • 包含shapefile(.shp)的“原始文件”子文件夹。
  • 空的“已处理文件”子文件夹。

我正在尝试编写一个脚本,该脚本查找每个父文件夹(文件夹1文件夹2等),如果找到原始文件文件夹,它将运行一个函数并将结果输出到“已处理的文件”文件夹中。

我制作了一个简单的图表来说明这一点,如果文件夹1包含相关的子文件夹,则该函数将运行;如果文件夹2没有包含子文件夹,然后它只是忽略:

资料夹结构

我查看了以下帖子,但遇到了一些麻烦:

以下是脚本,它看起来似乎运行得很愉快,但令人讨厌的是它不会产生错误,所以这个真正的菜鸟看不到问题出在哪里:

import os, sys

from os.path import expanduser
home = expanduser("~")

for subFolders, files in os.walk(home + "\Test\\" + "\*Original\\"):
 if filename.endswith('.shp'):

    output = home + "\Test\\" + "\*Processed\\" + filename

    # do_some_function, output  
xph

我猜您在os.walk()-loop中混了一些东西

我只是创建了一个简单的结构,如您的问题所示,并使用此代码来获得您想要的东西:

root_dir = '/path/to/your/test_dir'
original_dir = 'Original files'
processed_dir = 'Processed files'

for path, subdirs, files in os.walk(root_dir):
    if original_dir in path:
        for file in files:
            if file.endswith('shp'):
                print('original dir: \t' + path)
                print('original file: \t' + path + os.path.sep + file)
                print('processed dir: \t' + os.path.sep.join(path.split(os.path.sep)[:-1]) + os.path.sep + processed_dir)
                print('processed file: ' + os.path.sep.join(path.split(os.path.sep)[:-1]) + os.path.sep + processed_dir + os.path.sep + file)
                print('')

如果您确实确定目录树的外观,我建议仅在目录爬行脚本中使用通配符。我宁愿使用文件夹的全名来进行搜索,就像在脚本中一样。

更新:路径

每当使用路径时,都要注意路径分隔符-斜线。

在Windows系统上,反斜杠用于:

C:\any\path\you\name

大多数其他系统使用常规的正斜杠:

/the/path/you/want

在python中,可以直接使用正斜杠,而不会出现任何问题:

path_var = '/the/path/you/want'

...而不是反斜杠。反斜杠是python字符串中的特殊字符。例如,它用于newline-command:\n

为了澄清您不想将其用作特殊字符,而是将其用作反斜杠本身,您必须使用另一个反斜杠“转义”它'\\'这使得Windows路径如下所示:

path_var = 'C:\\any\\path\\you\\name'

...或者您可以使用“ procedures”将字符串标记为“原始”字符串(或“文字字符串”)r请注意,这样做后,您将无法再在该字符串中使用特殊字符。

path_var = r'C:\any\path\you\name'

在您的评论中,您使用了示例root_dir = home + "\Test\\"该字符串中的反斜杠在此处用作特殊字符,因此python会尝试从反斜杠和以下字符中理解:\T我不确定这在python中是否有任何意义,但是\t会转换为制表位。无论哪种方式-都不会解析为您要使用的路径。

我想知道为什么您的其他示例有效。在中"C:\Users\me\Test\\"\U\m应该导致类似的错误。而且您还混合了单反斜线和双反斜线。

那就是...

当您照顾好OS路径分隔符并尝试使用新路径时,还请注意python为您做了很多与路径有关的事情。例如,如果您的脚本像os.walk()在Windows系统上一样读取目录,则分隔符已经被处理为双反斜杠。无需我检查-通常只是硬编码的字符串,您必须在这里保重。

最后:Python的os.path模块提供了许多方法来处理路径,分隔符等。例如,os.path.sep(和os.sep)也将在运行python的系统的正确分隔符中转换。您也可以使用建立路径os.path.join()

最后:主目录

您用于expanduser("~")获取当前用户的主路径。那应该可以正常工作,但是如果您使用的是旧版本的python,则可能存在错误-请参见:Windows上的expanduser(“〜”)首先要寻找HOME

因此,请检查home-path是否正确解析,然后使用os-module的功能构建路径:-)

希望有帮助!

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将文件从资源内部的子文件夹复制到SpringBoot项目资源内部的另一个子文件夹

在package.json中创建一个子文件夹

如何使用Azure Storage SDK将Azure File Storage上的文件从一个子文件夹移动到另一个子文件夹?

在一个目录内的文件夹中创建多个子文件夹

使用Python将子文件夹中的图像复制到另一个文件夹

将类导入子文件夹中的另一个文件时处理记录器目录

在目录的每个子文件夹中创建一个文件夹?

.htaccess仅将子文件夹的根目录重定向到另一个子文件夹?

通配符子域到另一个子文件夹中的子文件夹

将文件列表从目录+子文件夹复制到另一个文件夹

有没有一种方法可以使用python中该文件名的子文本将文件从一个文件夹复制到另一个文件夹?

如何通过命令在Matlab中复制最后一个子文件夹

cp某些文件从一个文件夹到另一个文件夹

在多个文件夹中创建一个子文件夹

在另一个文件夹中创建相同的子文件夹

htaccess:将子文件夹重定向到另一个子文件夹

在文件夹及其所有子文件夹的所有文件中搜索并替换另一个子字符串

tar整个子文件夹和另一个子文件夹中的单个文件,保留目录结构吗?

将除一个子文件夹外的所有子文件夹移动到该子文件夹中

将特定的电子邮件从一个子文件夹移动到另一个子文件夹

php复制功能从一个文件夹到另一个文件夹

将特定子文件夹中的文件移动到另一个子文件夹

WinRAR批处理文件,用于将每个文件夹中的第一个子目录压缩为一个zip文件

将一个目录中的子文件夹移动到另一个目录

从子文件夹中删除文件但要排除一个子文件夹-批处理文件

告诉 make 目标将在一个子文件夹中

当您在另一个子文件夹中时,如何从子文件夹导入文件?(Python)

从另一个子文件夹导入类

仅当另一个文件夹中不存在子文件夹和文件时,才从一个文件夹复制子文件夹和文件