2017-07-07 10 views
3

でファイルを移動すること:Pythonは、予想外に、私は、スクリプトを持っているos.rename

  • ファイル
  • のリストに一意の各年のフォルダを作成し、すべてのディレクトリ内のファイル+そのサブディレクトリを
    1. ループ
    2. ファイルをそれぞれのフォルダ年に移動します。
    3. タイムスタンプ+固有番号に基づいて名前を変更します。

    パート1〜3のみを実行すると、ファイルが正しくフォルダに移動します。

    パーツ1〜4(os.renameパーツを含む)を実行すると、ファイルを親ディレクトリに移動した後にファイルの名前が変更されます。

    スタートファイル構造:予想

    parent_folder 
         --> file.txt modified 01-21-2012 
         --> file2.txt modified 09-30-2013 
         --> file3.txt modified 06-21-2017 
    

    結果:

    parent_folder 
    --> '2012' 
         --> 2012-01-21-1.txt 
    --> '2013' 
         --> 2013-09-30-2.txt 
    --> '2017' 
         --> 2017-06-21-3.txt 
    

    実際の結果:

    parent_folder 
    --> '2012' 
    --> '2013' 
    --> '2017' 
    --> '2012-01-21-1.txt' 
    --> '2013-09-30-2.txt' 
    --> '2017-06-21-4.txt' 
    

    あなたが見ることができるように、それはファイルの名前を変更したが、その外にそれらを移動しますフォルダ。なぜこれをやっているのですか?

    私のコード(私はロギング用のprint文を挿入):

    import os, datetime, sys, shutil 
    
    #PART 1 : Change to the inputted directory 
    #=============================== 
    
    # This is the directory I will work on. 
    p = 'ENTER_FOLDER_PATH_HERE' 
    print('This is the directory that will be organized:') 
    print(os.getcwd()) 
    if os.path.isdir(p): # check if directory exists 
        print("Step 1: Changing directory") 
        os.chdir(p) 
    
    #PART 2 : Make a folder for each unique year 
    #=========================================== 
        fileNames = next(os.walk(os.getcwd()))[2] # list files, excluding subdirectories 
        f = {} 
        filename = [] 
        dates = [] 
    
        # Loop through each file and grab the unique year. 
        # Store the file (key) and its modified year (value) into dictionary 'f'. 
        for name in fileNames: 
         f[name] = datetime.datetime.fromtimestamp(os.path.getmtime(name)).strftime("%Y") 
         dates = list(set(f.values())) 
    
        # Create the list of unique folders from the dictionary. 
        print("Step 2: Creating the following folders:\n", dates) 
        print('\n') 
        [os.mkdir(folder) for folder in dates] 
    
    
    #PART 3: Move all files to their respective folders based on modified year. 
    #========================================================================== 
        if sys.platform == 'Windows': 
         print("Step 3: moving files...") 
         [shutil.move(key, os.getcwd() + '\\' + value) for key, value in f.items()] 
        elif sys.platform == 'darwin': 
         print("Step 3: moving files...") 
         [shutil.move(key, os.getcwd() + '//' + value) for key, value in f.items()] 
        else: 
         print("Sorry, this script is not supported in your OS.") 
    else: 
        print("Oops, seems like that directory doesn't exist. Please try again.") 
    
    
    #PART 4: Rename the files 
    #========================================================================== 
    # Get each file in directory and renames it to its modified date, Y-M-D format 
    count=1 
    for root, dir, files in os.walk(p): 
        for file in files: 
         if not file.startswith('.'): # ignore hidden files 
          filePath = os.path.join(root,file) 
          ext = os.path.splitext(filePath)[1] 
          print("File number: ", count, file, ext) 
          print('\n') 
          os.rename(filePath, datetime.datetime.fromtimestamp(os.path.getmtime(filePath)).strftime("%Y-%m-%d") + '-' + str(count) + ext) 
         count += 1 
         print(filePath) 
    

    ログ:

    This is the directory that will be organized: 
    TEST_PATH 
    Step 1: Changing directory 
    Step 2: Creating the following folders: 
    ['2013', '2012', '2017'] 
    
    
    Step 3: moving files... 
    File number: 1 2012-01-21-1.jpg TEST_PATH/2012/2012-01-21-1.jpg 
    TEST_PATH//2012/2012-01-21-1.jpg 
    
    File number: 2 2013-09-30-2.jpg TEST_PATH/2013/2013-09-30-2.jpg 
    TEST_PATH/2013/2013-09-30-2.jpg 
    TEST_PATH/2013/2013-09-30-2.jpg 
    
    File number: 4 June 21 2017.txt TEST_PATH/2017/June 21 2017.txt 
    TEST_PATH/2017/June 21 2017.txt 
    

    答えて

    1

    それはあなたが現在いるため、作業ディレクトリの、ファイルを移動し、私はそれが動作gues。ちょうどmvコマンドのように。結果のファイルは、ranameの後、cwdを基準にして、os.rename関数の2番目の引数で指定されたパスに格納されます。正しく動作させるには、新しいファイル名で相対パスを指定する必要があります。

    Btw。この方法で一度にステップ3 & 4を実行できます。

    +0

    今、多くの意味がある - それは働いて、ありがとう! – tkim90

    関連する問題