我有一个包含一些文件名(位置)的列表,我想做的是从列表位置中删除每个元素。
条件:如果文件名以排除列表中的任何字符串开头,则不打印文件名。
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'开头的文件名
我的代码有什么问题?
最佳答案
str.startswith
接受一个 tuple
参数来检查,这样你就可以避免额外的循环来检查和担心排序比较,所以你可以使用:
exc = tuple(excludes)
# Or start with: excludes = ('/data/archive/', '/data' , '/ebooks/') instead
for location in locations:
if not location.startswith(exc):
print(location)
这给了你:
/local/archive/data/fil2
/local/archive/data/fil3
/ebboks/wordpress/fil1
关于python - 从满足某些条件的列表中删除某些元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46747503/