對于檔案名串列file_names,我嘗試使用下面的代碼來過濾不包含 fooor的檔案名bar:
file_names = ['foo_data.xlsx', 'bar_data.xlsx', 'data.xlsx']
subs = ['foo', 'bar']
for file_name in file_names:
for sub in subs:
if sub not in file_name:
print(file_name)
輸出:
foo_data.xlsx
bar_data.xlsx
data.xlsx
data.xlsx
但它不起作用,它應該回傳data.xlsx。
同時,它適用于包含案例:
file_names = ['foo_data.xlsx', 'bar_data.xlsx', 'data.xlsx']
subs = ['foo', 'bar']
for file_name in file_names:
for sub in subs:
if sub in file_name:
print(file_name)
出去:
foo_data.xlsx
bar_data.xlsx
有人可以幫助解釋我的代碼中的錯誤以及如何解決它嗎?謝謝。
參考:
Python 是否有字串“包含”子字串方法?
uj5u.com熱心網友回復:
因為您不希望任何sub檔案名出現在檔案名中;一種方法是用以下方法包裹內回圈all:
for file_name in file_names:
if all(sub not in file_name for sub in subs):
print(file_name)
輸出:
data.xlsx
uj5u.com熱心網友回復:
一種正則運算式方法是形成黑名單子字串的交替,然后使用re.search和串列推導來查找匹配項。
file_names = ['foo_data.xlsx', 'bar_data.xlsx', 'data.xlsx']
subs = ['foo', 'bar']
regex = r'(?:' '|'.join(subs) r')'
matches = [f for f in file_names if not re.search(regex, f)]
print(matches) # ['data.xlsx']
uj5u.com熱心網友回復:
file_names = ['foo_data.xlsx', 'bar_data.xlsx', 'data.xlsx']
subs = ['foo', 'bar']
file_names1 = []
for i in range(len(file_names)):
if file_names[i].startswith(subs[0])==False and file_names[i].startswith(subs[1])==False:
file_names1.append(file_names[i])
print(file_names1)
出去:
['data.xlsx']
這應該會產生 file_names1 的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/467313.html
