Python:基于Python列表重命名文件

时间:2015-07-13 15:46:45

标签: python

我有一个包含大约一千个txt文件的目录。我已经用glob读取并探索了这些文件(在文件中搜索特定的字符串),并且我将感兴趣的文件的文件名附加到Python中的列表中,如下所示:

list_of_chosen_files = ['file2.txt', 'file10.txt', 'file17.txt', ...]

我也将这个列表用于其他事情,但是现在我想弄清楚如何使用OS模块来交叉引用目录中的文件名对照上面的列表,如果文件名是在该列表中,将“1-”添加到文件名的开头。我已将“1-”保存在变量中以便重复使用。这是我到目前为止所做的: -

var = "1-"

import os
for filename in os.listdir("."):
    if filename == list_of_chosen_files[:]:
        os.rename(filename, var+filename)
        print filename

它在anaconda中运行时没有任何错误,但没有任何打印,也没有任何文件被重命名。我觉得它应该是一个如此简单的解决方案,但是如果我真的不知道我在做什么,我会担心用OS模块探索目录。

任何帮助将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:2)

您的问题是这一行:

if filename == list_of_chosen_files[:]:

您正在将单个字符串(filename)与整个列表进行比较(list_of_chosen_files[:]只会返回整个列表)。如果要检查文件名是否在列表中,请使用:

if filename in list_of_chosen_files:

这将检查list_of_chosen_files是否包含filename

答案 1 :(得分:1)

错误:if filename == list_of_chosen_files[:]:

os.listdir(".")仅返回基本名称结果。不完整的路径。它们不存在于您当前的工作目录中。您需要将它们与root用户联系起来:

root = 'full Path of your directory'
for item in os.listdir(root):
    fullpath = os.path.join(root, item)
    os.rename(fullpath, fullpath.replace('filename', 'var+filename'))