我有一个包含一些文件名(位置)的列表,我要做的是从列表位置中删除所有元素。你知道吗
条件:若文件名以排除列表中的任何字符串开头,则不要打印该文件名。你知道吗
locations = ['/data/mybackup/data/fil1',
'/data/mybackup/data/fil2',
'/data/mybackup/data/fil3',
'/data/mybackup/song/fil1',
'/data/mybackup/song/fil2',
'/data/mybackup/song/fil3',
'/data/archive/song/fil1',
'/data/archive/song/fil2',
'/data/archive/song/fil3',
'/data/archive/data/fil1',
'/local/archive/data/fil2',
'/local/archive/data/fil3',
'/ebboks/wordpress/fil1',
'/ebooks/wordpress/fil2',
'/ebooks/wordpress/fil3']
excludes = [ '/data/archive/', '/data' , '/ebooks/' ]
for location in locations:
for exclude in excludes:
if not location.startswith(exclude):
print(location)
break
结果:
/data/mybackup/data/fil1
/data/mybackup/data/fil2
/data/mybackup/data/fil3
/data/mybackup/song/fil1
/data/mybackup/song/fil2
/data/mybackup/song/fil3
/local/archive/data/fil2
/local/archive/data/fil3
/ebboks/wordpress/fil1
/ebooks/wordpress/fil2
/ebooks/wordpress/fil3
我的结果仍然有以'/data'开头的文件名
我的代码怎么了?你知道吗
因为
location
就是"/data/mybackup/data/fil1"
,exclude
就是"/data/archive"
,location
变量不是以"/data/archive"
开头的。你知道吗由于在
excludes
列表中有一个"/data"
值,因此不需要放置另一个以"/data"
开头的路径。因此,如果定义excludes = ["/data", "/ebooks"]
,就不会有问题。你知道吗使用
all()
函数:输出:
str.startswith
接受要检查的tuple
个参数,这样就避免了额外的循环检查和有关排序比较的问题,因此可以使用:这给了你:
相关问题 更多 >
编程相关推荐