用Python重命名文件

时间:2016-01-08 21:03:10

标签: python file rename

我正在做一个关于Udacity的Python课程。还有一个名为Rename Troubles的类,它提供了以下不完整的代码:

import os
def rename_files():
    file_list = os.listdir("C:\Users\Nick\Desktop\temp")
    print (file_list)

    for file_name in file_list:
        os.rename(file_name, file_name.translate(None, "0123456789"))

rename_files()

正如教师解释的那样,这将返回错误,因为Python没有尝试重命名右侧文件夹中的文件。然后他继续检查“当前工作目录”,然后继续指定Python在哪个目录中重命名文件。

这对我没有意义。我们使用for循环专门告诉Python我们要重命名file_list的内容,我们刚刚在rename_files()中指向了我们需要的目录。那么为什么不尝试在该文件夹中重命名呢?为什么我们还需要弄清楚cwd然后改变它?代码看起来完全合乎逻辑而没有任何代码。

4 个答案:

答案 0 :(得分:3)

仔细查看os.listdir()给你的内容。它只返回名称的列表,而不是完整路径。

然后,您将继续os.rename其中一个名称,相对于您当前的工作目录而言,这些名称将被解释为相对路径

您可以os.path.join() os.rename()搜索data两个参数前面的路径,而不是弄乱当前的工作目录。

答案 1 :(得分:1)

我认为您的代码需要一些格式化帮助。

基本问题是os.listdir()返回相对于指定目录的名称(在本例中为绝对路径)。但是您的脚本可以从任何目录运行。操作传递给os.rename()的文件名来解释这个问题。

答案 2 :(得分:1)

查看相对路径和绝对路径,listdir返回相对于提供给listdir的路径(在本例中为绝对路径)的名称。然后os.rename被赋予此相对名称,除非应用程序的当前工作目录(通常是您从中启动应用程序的目录)与提供给listdir的目录相同,否则将失败。

有几种替代方法可以解决这个问题,更改当前的工作目录:

os.chdir("C:\Users\Nick\Desktop\temp")
for file_name in os.listdir(os.getcwd()):
    os.rename(file_name, file_name.translate(None, "0123456789"))

或使用绝对路径:

directory = "C:\Users\Nick\Desktop\temp"
for file_name in os.listdir(directory):
    old_file_path = os.path.join(directory, file_name)
    new_file_path = os.path.join(directory, file_name.translate(None, "0123456789"))
    os.rename(old_file_path, new_file_path)

答案 3 :(得分:0)

您可以从 ANY 现有目录中获取文件列表 - 即

os.listdir("C:\Users\Nick\Desktop\temp")

os.listdir("C:\Users\Nick\Desktop")

os.listdir("C:\Users\Nick")

您用于运行代码的Python解释器实例正在一个独立于您尝试获取信息的目录的目录中执行。因此,为了重命名正确的文件,您需要指定该文件的完整路径(或者运行Python解释器的相对路径)。