2017-12-01 13 views
0

ファイル名ごとに1つのディレクトリから別のディレクトリにファイルをコピーしたいとします。私のコードはそれをしていますが、同じ名前の異なるタイプの2つのファイルがあり、異なるフォントケースのファイルを持っている場合は、両方のファイルをコピーしています。 フォントケースを一致させてコピーするにはどうすればよいですか?私は正規表現を使いたくない。ファイル名のフォントケースを一致させてファイルをあるディレクトリから別のディレクトリにコピーする

例:

DIR1:

ファイル1 = test.txtの

FILE2 = Test.htmlという

私のコードは、両方のファイルをコピーしています。しかし、私はfile1だけをコピーしたいです。

誰かが私が間違っているところを見つけ出すのを助けてくれますか?続き

は私のコードです:

def copy_file(): 
    import os 
    import sys 
    import shutil 
    import glob 
    src=input('Enter the source path: ') 
    dst=input('Enter the destination path: ') 
    file_name=input('Enter the file name to copy: ') 
    count=0 
    if os.path.exists(src): 
     os.chdir(src) 
    else: 
     print('Enter a valid path') 
     sys.exit(1) 
    file_list=glob.glob(file_name+'*') 
    if os.path.exists(dst): 
     for f in file_list: 
      shutil.copy(f,dst) 
      count+=1 
     print('%d files copied' %count) 
    else: 
     print('Invalid destination') 
+1

どのオペレーティングシステムを使用しますか?おそらくLinuxを使用している場合にのみ可能です。 Globbingは明らかにうまくいかないので、 'os.scandir'や' os.listdir'を実行して手動でフィルタします。 – L3viathan

答えて

2

私はあなたが任意の拡張子にファイル名をglobing、その拡張子なしのファイル名を取っている、正しく理解していれば、問題はほとんどの証明可能お使いのOSのファイルシステムが付属しています(Windows NTFSやMacOS HFS +のように)大文字と小文字を区別しないでください。FileNamefilenameと同じですので、問題を解決するためにglobを使用すると、比較の際に行うグローブの後にファイル名を比較する必要があります感受性が高い。

def copy_file(): 
    import os 
    import sys 
    import shutil 
    import glob 
    src=input('Enter the source path: ') 
    dst=input('Enter the destination path: ') 
    file_name=input('Enter the file name to copy: ') 
    count=0 
    if os.path.exists(src): 
     os.chdir(src) 
    else: 
     print('Enter a valid path') 
     sys.exit(1) 
    file_list= [fname for fname in glob.glob(file_name+'*') if fname.startswith(file_name)] 
    if os.path.exists(dst): 
     for f in file_list: 
      shutil.copy(f,dst) 
      count+=1 
     print('%d files copied' %count) 
    else: 
     print('Invalid destination') 
0

これは私のために働きます。それを試して私に知らせてください。

import fnmatch 
import os 
import re 
import sys 
import shutil 

def copy_file(): 

    src=input('Enter the source path: ') 
    dst=input('Enter the destination path: ') 
    file_name=input('Enter the file name to copy: ') 
    count=0 
    if os.path.exists(src): 
     os.chdir(src) 
    else: 
     print('Enter a valid path') 
     sys.exit(1) 
    file_list= findfiles(file_name, src) 
    if os.path.exists(dst): 
     for f in file_list: 
      shutil.copy(f,dst) 
      count+=1 
     print('%d files copied' %count) 
    else: 
     print('Invalid destination') 

def findfiles(which, where='.'): 
    '''Returns list of filenames from `where` path matched by 'which' 
     shell pattern.'''  

    rule = re.compile(fnmatch.translate(which)) 
    return [name for name in os.listdir(where) if rule.match(name)] 
関連する問題