我遇到过使用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)?
提前感谢。
答案 0 :(得分:2)
您的naming
函数未返回名称,它会输出名称并返回None
。这就是为什么你收到关于None
的错误。
更改此内容:print(' '.join(r))
对此:return ' '.join(r)
答案 1 :(得分:1)
你正在混淆你的语言。在R中,函数将返回引用的最后一个东西,但在Python中你必须明确地说&#34; return&#39; &#39;。加入(R)&#34 ;.或者也许你正在混淆&#34; print&#34;并且&#34;返回&#34;。无论哪种方式,您都不会在命名()函数中显式返回任何内容,因此您将获得None对象。
至于你的命名()函数,你可以这样做:
>>> foo = "foo_bar_foobar"
>>> foo.replace('_', ' ').title() # Your whole naming() function, in one line!
'Foo Bar Foobar'
这是更多&#34; Pythonic&#34;因为它使用字符串类提供的内置函数。由于该代码经过全部测试和广泛验证(由其他所有Python程序员完成),因此当您遇到错误时,它可以更加自信,它不在replace()或title()函数中。这是Python等语言的最大好处之一。当您重新发明轮子时,您必须在新轮子上进行所有自己的测试和调试。 Python,Ruby等语言为您提供非常可靠的轮子。
答案 2 :(得分:1)
一个R解决方案,
在here中为大写(标题样式)块写一个小实用程序函数
simpleCap <- function(x) {
s <- strsplit(x, " ")[[1]]
paste(toupper(substring(s, 1,1)), substring(s, 2),
sep="", collapse=" ")
}
阅读感兴趣的文件(为了便于阅读)
files <- dir(pattern = ".pdf$") #".pdf$" as an example
3A。很好,使用(管道)“%&gt;%”运算符
library(dplyr)
files %>%
gsub("_", " ", .) %>%
lapply(simpleCap) %>%
unlist %>%
file.rename(from = files, to = .)
3B。或者是一个不太好的版本,没有'管道'
file.rename(from = files, to = unlist(lapply(gsub("_", " ", files), simpleCap))