我对python很新,但我一直在努力学习基础知识,以帮助我在地质学方面的研究。
无论如何我有几个文件,一旦我从他们的zip文件中提取(痛苦的慢进程顺便说一句)产生几百个子目录,每个子目录有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'
非常感谢任何帮助,我提前感谢您的时间。
此致
比约
答案 0 :(得分:7)
首先,欢迎来到社区,和python!您可能想要更改您的用户名,特别是如果您经常在这里。 :)
我建议以下内容(从Mr. 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)
答案 1 :(得分:3)
更新:提问者在下面澄清说他/她实际上正在调用移动功能,这是我答案的第一点。
还有一些其他事项需要考虑:
os.walk
错误的每个元组中返回的元素顺序,我很害怕 - 检查documentation for that function。files
,并且需要os.join
每个root
,而不是src
}} os.walk
返回的值并注释掉该循环中的其余代码,上述内容将是显而易见的。shutil.move
,直到您确定它是正确的。答案 2 :(得分:2)
我认为你已经混淆了你应该使用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:
...
答案 3 :(得分:1)
您需要在Python中执行此操作的任何特定原因吗?一个简单的shell命令会不简单吗?如果您使用的是类Unix系统,或者可以在Windows上访问Cygwin:
find src_dir -name "*dem.tif" -exec mv {} dst_dir