For a list of file names file_names
, I try to use code below to filter file names not containing foo
or bar
:
JavaScript
x
8
1
file_names = ['foo_data.xlsx', 'bar_data.xlsx', 'data.xlsx']
2
subs = ['foo', 'bar']
3
4
for file_name in file_names:
5
for sub in subs:
6
if sub not in file_name:
7
print(file_name)
8
Output:
JavaScript
1
5
1
foo_data.xlsx
2
bar_data.xlsx
3
data.xlsx
4
data.xlsx
5
But it’s not working out, it should return data.xlsx
.
Meanwhile, it works for containing case:
JavaScript
1
8
1
file_names = ['foo_data.xlsx', 'bar_data.xlsx', 'data.xlsx']
2
subs = ['foo', 'bar']
3
4
for file_name in file_names:
5
for sub in subs:
6
if sub in file_name:
7
print(file_name)
8
Out:
JavaScript
1
3
1
foo_data.xlsx
2
bar_data.xlsx
3
Does someone could help to explain what’s error in my code and how to fix it? Thanks.
Reference:
Does Python have a string ‘contains’ substring method?
Advertisement
Answer
Since you don’t want any sub
to be in the file names; one way is to wrap the inner loop with all
:
JavaScript
1
4
1
for file_name in file_names:
2
if all(sub not in file_name for sub in subs):
3
print(file_name)
4
Output:
JavaScript
1
2
1
data.xlsx
2