我有一个包含大约一千个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模块探索目录。
任何帮助将不胜感激!谢谢!
答案 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'))