将子目录中特定文件移动到目录 - python
我对Python还比较陌生,但我一直在努力学习基础知识。
总之,我有几个文件,一旦从压缩包中提取出来(这个过程慢得让人抓狂),就会产生几百个子文件夹,每个文件夹里有2到3个文件。现在我想做的是提取所有以'dem.tif'结尾的文件,并把它们放到一个单独的文件夹里(是移动,不是复制)。
我可能有点急于求成,但我写的代码运行没有错误,所以它一定是找不到那些文件(其实是存在的!),所以才给我返回了else语句。以下是我写的代码:
import os
src = 'O:\DATA\ASTER GDEM\Original\North America\UTM Zone 14\USA\Extracted' # input
dst = 'O:\DATA\ASTER GDEM\Original\North America\UTM Zone 14\USA\Analyses' # desired location
def move():
for (dirpath, dirs, files) in os.walk(src):
if files.endswith('dem.tif'):
shutil.move(os.path.join(src,files),dst)
print ('Moving ', + files, + ' to ', + dst)
else:
print 'No Such File Exists'
4 个回答
3
更新:提问者在下面澄清了,他/她实际上是在调用移动函数,这也是我回答中的第一个要点。
还有一些其他需要考虑的事情:
- 你从
os.walk
返回的每个元组中的元素顺序可能搞错了,建议你查看一下这个函数的文档。 - 假设你已经修正了这个问题,还要记得你需要遍历
files
,并且要把每个文件用os.join
连接到root
,而不是src
。 - 如果你打印出
os.walk
返回的值,并把那段循环中的其他代码注释掉,上面的内容应该会很明显。 - 对于像移动文件这样的可能会造成破坏的操作,我建议你先尝试一些代码,只打印出传给
shutil.move
的参数,直到你确认这些参数是正确的。
3
我觉得你搞混了如何使用 os.walk()
这个函数。
for dirpath, dirs, files in os.walk(src):
print dirpath
print dirs
print files
for filename in files:
if filename.endswith('dem.tif'):
shutil.move(...)
else:
...
9
首先,欢迎你加入这个社区,也欢迎你学习Python!如果你经常来这里,可能想考虑换个用户名哦。:)
我建议你可以参考以下内容(这个建议是从Beazley先生那里来的):
# genfind.py
#
# A function that generates files that match a given filename pattern
import os
import shutil
import fnmatch
def gen_find(filepat,top):
for path, dirlist, filelist in os.walk(top):
for name in fnmatch.filter(filelist,filepat):
yield os.path.join(path,name)
# Example use
if __name__ == '__main__':
src = 'O:\DATA\ASTER GDEM\Original\North America\UTM Zone 14\USA\Extracted' # input
dst = 'O:\DATA\ASTER GDEM\Original\North America\UTM Zone 14\USA\Analyses' # desired location
filesToMove = gen_find("*dem.tif",src)
for name in filesToMove:
shutil.move(name, dst)