簡體   English   中英

使用python或R重命名目錄中的文件

[英]renaming files in a directory using python or R

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

我將這些文件放在要重命名的目錄中:

    -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)?

提前感謝。

您的naming函數不返回名稱,而是輸出名稱並返回None 這就是為什么您會收到有關None的錯誤的原因。

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

為此: return ' '.join(r)

您正在混淆自己的語言。 在R中,該函數將返回最后引用的內容,但是在Python中,您必須明確地說“ return''.join(r)”。 或者,也許您混淆了“打印”和“返回”。 無論哪種方式,您都不會在naming()函數中顯式返回任何內容,因此會得到None對象。

至於您的naming()函數,您可以執行以下操作:

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

這更像是“ Pythonic”,因為它使用了字符串類提供的內置函數。 由於該代碼已經過測試(並由其他所有Python程序員進行了廣泛驗證),因此您可以更加有信心,當遇到錯誤時,它不在replace()或title()函數中。 這是Python之類的語言的最大好處之一。 重新發明輪子時,必須在新輪子上進行所有自己的測試和調試。 諸如Python,Ruby等語言為您提供了非常可靠的輪子。

一個R解決方案

  1. 此處為大寫(標題樣式)塊編寫一個小的實用程序函數

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

  2. 讀取感興趣的文件(以提高可讀性)

    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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM