【问题标题】:Moving files with Wildcards in Python在 Python 中使用通配符移动文件
【发布时间】:2015-03-07 08:51:19
【问题描述】:

所以我试图将所有以“A”开头的文件移动到某个目录。现在我现在的 Windows 命令提示符不支持这种方法:

move A* A_Dir

但是这与 Python 相结合能找到方法吗?还是我必须浏览每个单独的文件? 如:

contents=os.listdir('.')
for file in content:
    if file[0] == 'A':
        os.system("move %s A_Dir" % file)

...等等。还有其他更简单、更快捷的解决方案吗? -谢谢!

【问题讨论】:

  • 如果您在 Windows 上执行此操作,请使用批处理文件命令,非常适合。
  • 那个批处理文件是什么样子的?

标签: windows file python-2.7 wildcard


【解决方案1】:

在 Windows 上:此示例将以“A”开头的文件从“C:\11”移动到“C:\2”

选项#1:如果您使用的是批处理文件,请创建批处理文件(movefiles.bat),如下所示:

movefiles.bat:

move /-y "C:\11\A*.txt" "C:\2\"

从python脚本执行这个批处理文件,如下所示:

import os
batchfile = "C:\\1\\movefiles.bat"
os.system( "%s" % batchfile)

选项 #2: 使用 glob & shutil

import glob
import shutil
for data in glob.glob("C:\\11\\A*.txt"):
    shutil.move(data,"C:\\2\\")

如果我们要move所有filesdirectory以A开头:

import glob
import shutil

for data in glob.glob("C:\\11\\A*"):
        shutil.move(data,"C:\\2\\")

根据@eryksun 的评论,我添加了if not os.path.isdir(data):,如果只需要移动以A 开头的files,在这种情况下,目录将被忽略。

import glob
import shutil
import os
for data in glob.glob("C:\\11\\A*"):
    if not os.path.isdir(data):
        shutil.move(data,"C:\\2\\")

【讨论】:

  • cmd 内置的move 命令不能用通配符匹配多个目录,所以move A* A_Dir 只移动匹配A* 的文件。对于 Python 中的等价物,您需要从全局中过滤目录,例如[f for f in glob.glob('A*') if not os.path.isdir(f)] .
  • @eryksun - 谢谢!选项#2,在给定的答案中,使用globshutil。你认为,我们应该更新答案以添加if not os.path.isdir(f) 条件吗?
  • 顺便说一句,我相信我们不需要把if not os.path.isdir(f)作为选项#2使用wild cardA*.txt,它只会返回以A开头并具有extension .txt的文件,并且目录将是忽略。请在我去之前确认并更新答案中的选项 #2
  • 解决方案需要通用。此外,问题要求A*,而不是A*.txt。但即使不是这样,也没有什么说目录不能命名为A_Dir.txt
猜你喜欢
  • 2015-02-11
  • 2014-01-21
  • 2014-08-05
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
相关资源
最近更新 更多