2015-08-30 55 views
-1

我遇到過使用python重命名目錄中的文件的類似問題。使用python或R重命名目錄中的文件

我有一個目錄中的這些文件,我想重新命名:

-statistical_analysis_with_r 
    -statistical_pattern_recognition_3rd_edition 

-Statistical Analysis With R 
    -Statistical Pattern Recognition 3rd Edition 

爲此,我寫這個劇本在Windows中:

def naming(so): 
    import re 
    w=re.split('[ _]+',so) 
    r=[] 
    for i in w: 
     r.append(i.capitalize()) 
    print(' '.join(r)) 



import os 
for c in os.listdir(os.getcwd()): 
    if c.endswith(".pdf"): 
     os.rename(c,naming(c)) 
print(os.listdir(os.getcwd())) 

但我我得到這個錯誤:

Statistical Analysis With R.pdf 
Traceback (most recent call last): 

    File "<ipython-input-79-d7f645d6d3e5>", line 4, in <module> 
    os.rename(c,naming(c)) 

TypeError: rename: can't specify None for path argument 

任何人都可以幫助發生什麼事嗎?

And any help doing same thing using R (www.r-project.org)? 

提前致謝。

+0

在R,看看'幫助(file.rename)' –

+3

貌似這已經回答了[這裏](HTTP://計算器.com/questions/10758965/how-do-i-rename-files-using-r) – RayVelcoro

回答

2

您的naming函數不返回名稱,它打印出名稱並返回None。這就是爲什麼你得到一個關於None的錯誤。

更改此:print(' '.join(r))

要這樣:return ' '.join(r)

+0

謝謝,你解決了我的問題。 –

1

你混淆了你的語言。在R中,該函數將返回所引用的最後一個東西,但在Python中,您必須明確說出「return」'.join(r)「。或者,也許你在混合「打印」和「返回」。無論哪種方式,你都不會在你的命名()函數中顯式返回任何東西,所以你得到的是None對象。

至於你的命名()函數,你可以這樣做:

>>> foo = "foo_bar_foobar" 
>>> foo.replace('_', ' ').title() # Your whole naming() function, in one line! 
'Foo Bar Foobar' 

這是更「Python化」,因爲它使用String類提供的內置功能。由於該代碼都經過了測試並得到了廣泛的驗證(所有其他Python程序員),您可以更加自信地認爲,當遇到錯誤時,它不在replace()或title()函數中。這是像Python這樣的語言最大的好處之一。當你重新發明車輪時,你必須在你的新車輪上進行所有你自己的測試和調試。 Python,Ruby等語言爲您提供非常可靠的輪子。

1

的R溶液,

  1. 寫一個小工具的功能在here爲大寫(標題樣式)塊

    simpleCap <- function(x) { s <- strsplit(x, " ")[[1]] paste(toupper(substring(s, 1,1)), substring(s, 2), sep="", collapse=" ") }

  2. 讀取感興趣的文件(S) (爲了可讀性)

    files <- dir(pattern = ".pdf$") #".pdf$" as an example

3a。很好,使用(管道)「%>%」運算符

library(dplyr) 

files %>% 
gsub("_", " ", .) %>% 
lapply(simpleCap) %>% 
unlist %>% 
file.rename(from = files, to = .) 

3b。或在一個不太漂亮的版本,沒有「管」

file.rename(from = files, to = unlist(lapply(gsub("_", " ", files), simpleCap))