簡體   English   中英

在字符串中查找列表的確切項目

[英]Find exact item of list in a string

我在python循環期間遇到假陰性的問題。

那是我的清單:

l = ['modello', 'modello1', 'modello_old', 'new_modello']

那是一個字符串:

db = '/home/user/modello1.sqlite'

我想做的是過濾db字符串並輸出出現在字符串中的列表元素。

因此,結果應僅為 modello1

這是我的循環:

for i in l:
    if i in db:
        print i

但結果不是我想要獲得的:

modello
modello1

如何匹配確切的單詞?

編輯 :問題可能是db依賴於操作系統,所以/可以在\\進行轉換。

EDIT2 :使用@ Karoly-Horvath解決方案:

轉換列表中的數據庫:

db = [os.path.basename(db).replace('.sqlite', '')]

在整個列表中循環db的元素:

for i in db:
    if i in l:
        print i

使用正則表達式或字符串函數提取相關部分:

m = os.path.basename(db).replace('.sqlite', '')  # 'modello1'

或(這是原始答案,僅適用於Unix路徑)

m = db.split('/')[-1].replace('.sqlite', '')     # 'modello1'

現在您可以檢查完全匹配:

m in l   # True

如果要檢查不帶擴展名的文件名,請使用os.path.basenameos.path.splitext

>>> from os import path
>>> s = '/home/user/modello1.sqlite'

>>> path.basename(s)
>>> 'modello1.sqlite'

>>> path.splitext(path.basename(s))
('modello1', '.sqlite')

>>> filename = path.splitext(path.basename(s))[0]
>>> filename
'modello1'

使用文件名:

>>> possibles = ['modello', 'modello1', 'modello_old', 'new_modello']
>>> for possible in possibles:
...     if possible in filename:
...         print possible, 'in', filename
modello in modello1
modello1 in modello1

如果您只想檢查是否有任何可能性匹配:

>>> if any(possible in filename for possible in possibles):
...     print filename
modello1

我想我現在知道OP想要一個完全匹配的東西:

>>> if filename in possibles:
...     print filename
modello1

這與modello不匹配。

import os
db_basename = os.path.basename(db)
db_basename = os.path.splitext(db_basename)[0] # remove extension

使用os獲取文件名

這個怎么樣

for i in l:
    if '/'+i+'.' in db:
        print i

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM