Python列表理解不适用于函数参数

时间:2015-02-26 05:16:39

标签: python list-comprehension

我正在尝试获取目录中所有文件的列表并删除它们。我使用了以下代码,它工作正常。

代码:

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

我们不能用列表推导中的参数调用函数,还是有其他方法?

4 个答案:

答案 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')