我正在尝试获取目录中所有文件的列表并删除它们。我使用了以下代码,它工作正常。
代码:
import os
file_list=os.listdir(mypath)
for x in file_list:
os.remove(mypath+"/"+x)
但是当我尝试使用列表理解方式时,它会给出syntax error
。
import os
file_list=os.listdir(mypath)
os.remove(mypath+"/"+x) for x in file_list
我们不能用列表推导中的参数调用函数,还是有其他方法?
答案 0 :(得分:3)
import os
file_list=os.listdir(mypath)
[os.remove(mypath+"/"+x) for x in file_list]
我猜你错过了[]
。
编辑:
Syntax
Following is the syntax for remove() method:
os.remove(path)
Parameters
path -- This is the path, which is to be removed.
Return Value
This method does not return any value.`
答案 1 :(得分:3)
import os
file_list=os.listdir(mypath)
[os.remove(mypath + os.sep +x) for x in file_list]
或只是
[os.remove(mypath + os.sep +x) for x in os.listdir(mypath)]
或
for x in os.listdir(mypath):
os.remove(mypath + os.sep +x)
答案 2 :(得分:2)
您也可以使用os.path.join()获取路径。对于' x'目录和' y'文件,os.file.join(' x',' y')会给你' x / y'。所以,你可以在这里使用它:
[os.remove(os.path.join(mypath, x) for x in os.listdir(mypath)]
但是,此处不需要使用列表推导,因为列表压缩会返回列表。在这种情况下,您不想使用os.remove()
对象的列表(那么为什么要存储对象?)。因此,最好简单地使用:
for x in os.listdir(mypath):
os.remove(os.path.join(mypath, x)
答案 3 :(得分:1)
根据您的示例,您尝试删除某个文件夹中存在的所有文件。不是迭代文件夹的所有文件,而是单独删除每个文件,更好的方法是使用shutil.rmtree()。它将递归删除给定路径的所有文件(类似于unix中的rm -r /path/to/folder
)。
import shutil
shutil.rmtree('/path/to/folder')