0

私はそのようなdirツリーを持っています:

dir1
 - dir2
 - dir3
 - file1.java
 - file2.java
 - file3.cpp

*.javaファイルのみを現在のディレクトリの「java_files」という新しいディレクトリに移動したいと思います。どうやって作るの?私はshutildocを読みましたが...

これ:

def moveFiles() :
    source = "."
    destination = "java_files"
    if os.path.isfile(source):
        shutil.move(source, destination)

まったく動作しません...

代わりにシェル「mv」を使用したくありません!

編集:

私もこれを試しました:

def moveFiles() :
    source = "."
    destination = "java_files"
    dirList = os.listdir(source)
    for fname in  dirList:
        if fname.endswith(".java") :
            shutil.move(source, destination)

しかしそれは与える:

File "test.py", line 95, in <module>
 main()   File "test.py", line 91, in main
 moveFils()   File "test.py", line 82, in move
 shutil.move(source, destination)   File "/usr/lib/python2.7/shutil.py", line 295, in move
 raise Error, "Cannot move a directory '%s' into itself '%s'." % (src, dst) shutil.Error:Cannot move a directory '.' into itself 'java_files'.
4

2 に答える 2

2
if source.endswith('.java'):
    # do copy or move file
于 2012-08-20T15:21:17.393 に答える
1

このような場合、glob(ワイルドカードと正規表現を受け入れる)を使用します

#!/usr/bin/env python

import glob
import shutil
import os

source="."
destination = "/tmp/newDestination/"

if not(os.path.exists(destination)):
    os.makedirs(destination)
elif not(os.path.isdir(destination)):
    raise OSError("Kabooom! The destination %s exists, but is not a directory" % destination)

for javaFile in glob.glob(os.path.join(source, "*.java")):
    if os.path.isfile(javaFile):
        shutil.move(os.path.abspath(javaFile), destination)
于 2012-08-20T15:23:53.160 に答える