2

ファイルの名前を変更できるアルゴリズムをR言語で作成しようとしています。フォルダー内のすべての pdf ファイルの名前を 1,2,3,4,5 の番号で変更し、pdf 拡張子を保持したいと考えています。主な問題は次のとおりです。私のフォルダーにはファイルとフォルダーが含まれており、これらのフォルダーにはファイルとフォルダーなどが含まれています....これらすべてのサブフォルダー内のすべての pdf ファイルに、1 からファイル数までの番号で名前を付けたいこの特定のフォルダに (たとえば、アルファベット順に従って)! もう 1 つの問題: 私のフォルダーには PDF 以外のファイルも含まれています。

以下に例を示します: (次の例では、フォルダー 1 にはフォルダー 2 と 3 つのファイルが含まれています。フォルダー 2 には 4 つのファイルが含まれています。)

Folder1   "contains"   folder2     "contains"   Bzzz.file.R
                       A.file.txt               B.file.pdf
                       Bla.file.pdf             C.file.pdf
                       C.file.pdf               Delta.file.pdf

……これに変身するはず……。

Folder1  "contains"  folder2   "contains"  Bzzz.file.R
                     A.file.txt            1.pdf
                     1.pdf                 2.pdf
                     2.pdf                 3.pdf

アルゴリズムは、フォルダーの数に関係なく、「フォルダーの開始の深さ」が機能する必要があります

一部のフォルダーに 3.pdf または他の number.pdf という名前のファイルが既に存在する場合でも、これが機能する場合は少し良いですが、実際にはこの柔軟性がなくても対処できます。

助けてくれてありがとう!

このコードを実行しましたが、完全には機能していません。そのまま実行すると、次のエラー メッセージが表示されます。英語でRから取得できるエラーメッセージ)。

次に、「.」というディレクトリが含まれているため、dがおかしいことに気付きました。私のフォルダにない最初の位置に(ちなみにそれについての説明はありますか?!)。

だから私は d<-d[-1] を実行し、大きなラップを再実行すると、次のエラーメッセージが表示されます。

「setwd(d [x])のエラー:作業ディレクトリを変更できません」実際、最初のフォルダーのファイルの名前は変更されましたが、最初のフォルダーのみでした

ここで list.dirs() が与えるもの:

「。」"./3.Sept" "./4.Oct" "./5.Nov" "./6.Dec"

しかし、私は4つのフォルダしか持っていません。「.」というフォルダはありません。! そして、私が言ったように、 d<-d[-1] を実行すると、コードはディレクトリの変更に成功しないため、1つのフォルダーのみが名前が変更されます

4

1 に答える 1

1

list.files() はデフォルトでアルファベット順にファイルを返すため、これを実現する方法の 1 つは次のように非常に簡単です。

# Navigate to top directory using setwd("my/top/directory/here")
# This code will then rename all pdfs in the current directory and ALL sub-directories
setwd( "C:/whatever/directory" )    
    # Navigate to top directory using setwd("my/top/directory/here")
d <- list.dirs()
lapply( 1:length(d) , function( x ){ 
    require( R.utils)
    f <- list.files( path = getAbsolutePath( d[x] ) , pattern = "*.pdf" , full.names = TRUE )
    lapply( seq_len( length(f) ) , function(y) {
        file.rename( f[y] , paste( dirname( f[y] ) ,"/" , y , ".pdf" , sep = "" ) )
        })
    })
于 2013-03-20T16:03:22.063 に答える