[英]Transfer files from one directory to another if they match a condition using python
[英]How to process files from one subfolder to another in each directory using Python?
我在桌面上有一个基本的文件/文件夹结构,其中“Test”文件夹包含“Folder 1”,后者又包含2个子文件夹:
我正在尝试编写一个查看每个父文件夹( 文件夹1 , 文件夹2等)的脚本,如果找到原始文件子文件夹,它将运行一个函数并将结果输出到Processed files子文件夹中。
我做了一个简单的图表来展示如果文件夹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
我猜你在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'
...或者您可以将字符串标记为具有前进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
也将)在正确的seperator中转换为运行的系统python。 您还可以使用os.path.join()
构建路径。
您使用expanduser("~")
来获取当前用户的主路径。 这应该工作正常,但如果你使用旧的python版本,可能会有一个错误 - 请参阅: Windows上的expanduser(“〜”)首先查找HOME
因此,请检查主路径是否已正确解析,然后使用os
-module的强大功能构建路径:-)
希望有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.