Python从文本文件中的列表中删除目录中的文件

ski*_*een 2 python python-3.x

我已经搜索了许多关于基于某些参数(例如所有 txt 文件)删除多个文件的答案。不幸的是,我还没有看到任何将较长的文件列表保存到 .txt(或 .csv)文件并希望使用该列表从工作目录中删除文件的内容。

我将当前的工作目录设置为 .txt 文件所在的位置(带有要删除的文件列表的文本文件,每行一个)以及 ~4000 .xlsx 文件。在 xlsx 文件中,我想删除大约 3000 个(在 .txt 文件中列出)。

这是我到目前为止所做的:

import os
path = "c:\\Users\\SFMe\\Desktop\\DeleteFolder"
os.chdir(path)
list = open('DeleteFiles.txt')
for f in list:
   os.remove(f)
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect: 'Test1.xlsx\n'
Run Code Online (Sandbox Code Playgroud)

我觉得我错过了一些简单的东西。任何帮助将不胜感激!

谢谢

AGN*_*zer 7

  1. '\n'从文本文件中读取的每一行剥离结尾;
  2. 通过加入path文件名来制作绝对路径;
  3. 不要覆盖 Python 类型(即,在你的情况下list);
  4. 关闭文本文件或使用with open('DeleteFiles.txt') as flist.

编辑:实际上,在查看您的代码时,由于os.chdir(path),第二点可能没有必要。


import os
path = "c:\\Users\\SFMe\\Desktop\\DeleteFolder"
os.chdir(path)
flist = open('DeleteFiles.txt')
for f in flist:
    fname = f.rstrip() # or depending on situation: f.rstrip('\n')
    # or, if you get rid of os.chdir(path) above,
    # fname = os.path.join(path, f.rstrip())
    if os.path.isfile(fname): # this makes the code more robust
        os.remove(fname)

# also, don't forget to close the text file:
flist.close()
Run Code Online (Sandbox Code Playgroud)