python 您所在的位置:网站首页 python拷贝文件到指定目录 python

python

#python| 来源: 网络整理| 查看: 265

python - 使用python从多个目录复制特定文件,第1张

我对python很陌生,而且我被一段我想要实现的代码所困扰。我希望我能在这里找到一些帮助。

我有一个特定的文件列表,我想在一个目录中复制。我已经在互联网上阅读了很多建议,但我还没有读过足够具体的内容。

所以,在这种情况下:我在" FROM"中的不同文件夹中有多个图片文件。夹。我只想将我喜欢的内容复制到目标文件夹中#34; TO"

目前,这就是我所拥有的(来自Stackoverflow上的另一个主题):

src = "/Volumes/MacintoshHD/TEST_SHUTIL/FROM" dst = "/Volumes/MacintoshHD/TEST_SHUTIL/TO" file_names = ["120099.TIFF", "901664.TIFF", "902257.TIFF"] for file_name in file_names: full_file_name = os.path.join(src, file_name) if (os.path.isfile(full_file_name)): shutil.copy(full_file_name, dst)

我想知道是否有办法在子文件夹中查找文件,如isfile但不测试每个文件夹。

我查看了copytree,但它对我来说并不是很有用......

起初我想用文件及其网址创建一个字典,但它比预期更复杂(由于很多原因),所以最简单的方法是能够在子文件夹中找到这些文件。

许多坦克

巴特。

最佳答案:

4 个答案:

答案 0 :(得分:1)

这将生成一个包含源目录的文件名及其子目录的文件名的列表:

file_names = [os.path.join(dp, f) for dp, dn, fn in os.walk(src_dir) for f in fn]

然后您可以继续使用您的代码:

for file_name in file_names: full_file_name = os.path.join(src, file_name) if (os.path.isfile(full_file_name)): shutil.copy(full_file_name, dst)

虽然您必须搜索整个目录树,但只需搜索一次。

答案 1 :(得分:1)

谢谢大家的答案。自从我发布问题以来已经有一段时间了,从那时起我就没有时间测试你的答案了。所以请原谅我。

我仔细阅读了它们。我想我理解他们,即使他们没有像这样工作。

我终于设法得到我想要的东西,但它的注意事项尽可能聪明。

我通过创建文件夹列表获得了文件副本。

以下是代码:

import os, shutil, fnmatch src = ["/Volumes/MacintoshHD/TEST_SHUTIL/FROM/1", "/Volumes/MacintoshHD/TEST_SHUTIL/FROM/2", "/Volumes/MacintoshHD/TEST_SHUTIL/FROM/3"] dst = "/Volumes/MacintoshHD/TEST_SHUTIL/TO" listePlanDev = ["00120099.TIFF", "06901664.TIFF", "06902257.TIFF"] for file_name in listePlanDev : for dir_names in src: full_file_name = os.path.join(dir_names, file_name) if (os.path.isfile(full_file_name)): shutil.copy(full_file_name, dst)

所以这是我开始时的树:

\Volumes \MacintoshHD \TEST_SHUTIL \FROM - 00100001.TIFF - 00120099.TIFF - 06900001.TIFF - 06901664.TIFF - 06902257.TIFF \TO

最后我喜欢

\Volumes \MacintoshHD \TEST_SHUTIL \FROM - 00100001.TIFF - 00120099.TIFF - 06900001.TIFF - 06901664.TIFF - 06902257.TIFF \TO - 120099.TIFF - 901664.TIFF - 902257.TIFF

现在我需要使用os.walk在FROM中创建目录列表。当我使用程序时,应该有数千个它们。

这有很多阶段,我确信有更好的方法可以用更少的代码来实现它......

无论如何,我想提供一个"反馈"你的答案,谢谢大家。

巴特。

答案 2 :(得分:0)

使用os.walk和fnmatch:

copytiffs.py 强>

#~/usr/bin/env python import os, shutil, fnmatch def main(): src = "Volumes/MacintoshHD/TEST_SHUTIL/FROM" dst = "Volumes/MacintoshHD/TEST_SHUTIL/TO" file_names = ["120099.TIFF", "901664.TIFF", "902257.TIFF"] for root, dirnames, filenames in os.walk(src): for target in file_names: for candidate_filename in fnmatch.filter(filenames, target): shutil.copy(os.path.join(root, candidate_filename), dst) if __name__ == '__main__': main()

在运行脚本之前*

[[email protected] copyfiles]# tree ./ ./ `-- Volumes `-- MacintoshHD `-- TEST_SHUTIL |-- FROM | |-- 120099.TIFF | |-- ignoreme.txt | |-- sub1 | | |-- 901664.TIFF | | `-- ignoreme.txt | `-- sub2 | |-- 902257.TIFF | `-- ignoreme.txt `-- TO

RUNNING SCRIPT

[[email protected] copyfiles]# python copytiffs.py

在运行脚本之后

[[email protected] copyfiles]# tree . |-- Volumes | `-- MacintoshHD | `-- TEST_SHUTIL | |-- FROM | | |-- 120099.TIFF | | |-- ignoreme.txt | | |-- sub1 | | | |-- 901664.TIFF | | | `-- ignoreme.txt | | `-- sub2 | | |-- 902257.TIFF | | `-- ignoreme.txt | `-- TO | |-- 120099.TIFF | |-- 901664.TIFF | `-- 902257.TIFF `-- copytiffs.py

答案 3 :(得分:0)

也许在Unix中使用Python的find命令来搜索基础文件夹中的所有.TIFF个文件?

import os file_paths = os.popen('find . -name \*.TIFF -print').read().split('\n')

此处.表示当前目录,您可以将其更改为您希望用作基本目录的路径。

输出强>

>> for each in file_path: print each /Cpp/seive.TFF /Cpp/seive2.TFF .... 本文经用户投稿或网站收集转载,如有侵权请联系本站。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有