如何在字符串中查找文件名?

时间:2018-12-13 01:42:57

标签: python

我知道这可能是已经回答的问题,但我进行了很多搜索,但似乎找不到所需的答案。

也许我不明白这一点。 这是我所拥有的:

myarray = ['image003.jpg@01d36f77.5bf94310', 'image004.jpg@01d36f77.5bf94310']
img = ['image003.jpg', 'test', 'image004.jpg']

我正在尝试循环检查 img 是否在 myarray 中。

我尝试使用if any(i in img for m in myarrar)或通过执行img.find(myarray[i])

来尝试数组中每个元素的循环

有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

img中的myarray do 中没有文件名。但是,它们存在于myarray的某些元素中 ,因此您还需要一层循环。

any(fname in s for s in myarray for fname in img)

如果您需要事物存在于其中的索引:

for i, s in enumerate(myarray):
    if any(fname in s for fname in img):
        print(i)

答案 1 :(得分:1)

您可以在集合理解中使用str.partition来获取文件名(假设@从该字符串列表中的其他数据中分隔文件名):

>>> myarray = ['image003.jpg@01d36f77.5bf94310', 'image004.jpg@01d36f77.5bf94310']
>>> {e.partition('@')[0] for e in myarray} 
{'image003.jpg', 'image004.jpg'}

然后使用集合交集来针对列表img测试成员资格:

>>> img = ['image003.jpg', 'test', 'image004.jpg']
>>> {e.partition('@')[0] for e in myarray} & set(img)
{'image003.jpg', 'image004.jpg'}

如果要在img中的myarray中获得每个元素的索引,可以执行以下操作:

ref={e.partition('@')[0] for e in myarray} 
for i,fn in enumerate(img):
    if fn in ref: print(i,fn)

或更简洁:

>>> [(i,fn) for i,fn in enumerate(img) if fn in {e.partition('@')[0] for e in myarray}]
[(0, 'image003.jpg'), (2, 'image004.jpg')]