我尝试使用rename
功能删除特定目录中多个文件的最后几个字符。我使用本网站上的建议编写的代码看起来应该可以工作,但它会返回错误消息:
FileNotFoundError:[WinError 2]系统找不到指定的文件:' test1.txt' - > '测试'
这是我的代码:
import os
list = os.listdir("C:\\Users\\Jonathan\\Desktop")
for file in list:
if file.startswith("test"):
os.rename(file, file[0:4])
我的代码显示,对于以" test"开头的所有文件,请删除其后的所有字符。正如我所说,对我来说它看起来应该可行,但我是Python的新手,我甚至不理解错误信息的含义。
答案 0 :(得分:1)
由于您没有指定文件的完整路径,因此您的程序可能正在保存在根目录中。此外,您不应使用list
或file
作为变量名称,因为它们会影响Python的两种类型。
import os
files_path = "C:\\Users\\Jonathan\\Desktop\\"
lst = os.listdir(files_path)
for file_name in lst:
if file_name.startswith("test"):
os.rename(files_path + file_name, files_path + file_name[:-4])
答案 1 :(得分:1)
您实际上是在重命名的文件夹中吗?如果没有,问题很可能是您正在查找本地文件夹(您启动该程序的位置)。将该路径前置到每个文件名:
import os
cwd = "C:\\Users\\Jonathan\\Desktop"
list = os.listdir(cwd)
for file in list:
if file.startswith("test"):
os.rename(cwd+file, cwd+"test")
答案 2 :(得分:0)
试试这个:
import os
list = os.listdir("C:\\Users\\Jonathan\\Desktop\\")
for file in list:
if file[:4] == "test":
os.renames(list+file, list+file[:4])
顺便说一句,如果你需要找到文件并递归地重命名它们(这意味着将找到该目录中的所有目录)。您可以像这样使用os.walk()
:
for root, dirs, files in os.walk("C:\\Users\\Jonathan\\Desktop\\"):
for name in files:
if name[:4] == "test":
os.renames(os.path.join(root, name), os.path.join(root, name)[:4])
答案 3 :(得分:0)
您需要将os.rename()
与现有路径一起使用。如果您的工作目录不是包含该文件的目录,则脚本将失败。这应该独立于您的工作目录:
files_path = "C:\\Users\\Jonathan\\Desktop\\"
lst = os.listdir(files_path)
for fle in lst:
if fle.startswith("test"):
os.rename(os.path.join(files_path, fle),
os.path.join(files_path, fle[:4]) )
并避免使用list
作为可变名称。