删除以Python命名的文件

21

我有几个文件想要删除,它们的名称以相同的开头开始但是有不同的版本号。有人知道如何使用文件名的开头来删除文件吗?

Eg.
version_1.1
version_1.2

有没有一种方法可以删除以版本名称开头的任何文件?

谢谢


所以你想要删除与 version_1.* 匹配的文件? - Dominic Rodger
6个回答

51
import os, glob
for filename in glob.glob("mypath/version*"):
    os.remove(filename) 

替换mypath的正确路径(或 . (=当前目录))。并确保不要弄错路径:)

如果文件正在使用,则会引发异常。


2
异常只在Windows上引发。在Unix系统上,删除文件的操作有些不同。 - gnud

18
如果你真的想使用Python,你可以使用os.listdir()os.remove()的组合。前者会返回指定目录中所有文件的列表,后者可以删除指定文件。

I.e.:

my_dir = # enter the dir name
for fname in os.listdir(my_dir):
    if fname.startswith("version"):
        os.remove(os.path.join(my_dir, fname))

然而,正如其他答案所指出的那样,您真的不需要使用Python来完成此操作,Shell可能本身就支持这样的操作。


4

使用哪种语言?

在bash(Linux/Unix)中,您可以使用以下命令:

rm version*

或者在批处理(Windows / DOS)中,您可以使用以下命令:

del version*

如果您想用Python编写相关内容,这将是相当容易的 - 只需查看正则表达式的文档即可。
编辑: 仅供参考,以下是如何在Perl中执行此操作:
opendir (folder, "./") || die ("Cannot open directory!");
@files = readdir (folder);
closedir (folder);

unlink foreach (grep /^version/, @files);

2
import os
os.chdir("/home/path")
for file in os.listdir("."):
    if os.path.isfile(file) and file.startswith("version"):
         try:
              os.remove(file)
         except Exception,e:
              print e

os.path.isfile(file) 返回 False。 - aswzen

1
以下函数将删除以相同字符串开头的目录中的所有文件和文件夹:
import os
import shutil

def cleanse_folder(directory, prefix):
    for item in os.listdir(directory):
        path = os.path.join(directory, item)
        if item.startswith(prefix):
            if os.path.isfile(path):
                os.remove(path)
            elif os.path.isdir(os.path.join(directory, item)):
                shutil.rmtree(path)
            else:
                print("A simlink or something called {} was not deleted.".format(item))

0
import os
import re
directory = "./uploaded"
pattern = "1638813371180"
files_in_directory = os.listdir(directory)
filtered_files = [file for file in files_in_directory if ( re.search(pattern,file))]
for file in filtered_files:
    path_to_file = os.path.join(directory, file)
    os.remove(path_to_file)

这个列表不会包含只包含这个模式的文件吗?也许使用.startswith(pattern)就足够了。 - Tomasz Urbaszek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接