如何在 python 生成器表达式中包含多个搜索字符串?
How to include multiple search strings in python generator expression?
我有一个文件列表--前两个文件名相同,但目录路径不同。目录路径中还包含状态代码(例如 CA 或 OK)。
files = [r'C:\temp\OK\somefile_1234_nw.tif',
r'C:\temp\test\CA\somefile_1234_nw.tif',
r'C:\temp\OK\somefile_9999_nw.tif']
我可以使用以下生成器表达式提取具有特定文件名的第一个文件:
search_string = 'somefile_1234_nw.tif'
print next((s for s in files if search_string in s), None)
如何使用生成器表达式提取包含两个搜索字符串('CA' 和 'somefile_1234_nw.tif')中的项目的文件?在这种情况下,处理效率很重要,因为我的放大问题有数千个项目。
预期输出是:
'C:\temp\test\CA\somefile_1234_nw.tif'
你的意思是这样的吗?
>>> next((s for s in files if all(i in s for i in['somefile_1234_nw.tif', 'CA'])), None)
'C:\temp\test\CA\somefile_1234_nw.tif'
all()
检查迭代器中的所有元素是否都是 True
,如果是,return True
,否则,return False
.
像这样的东西应该可以工作:
search_strings = ['somefile_1234_nw.tif', 'CA']
print next((s for s in files if all([search_string in s for search_string in search_strings])), None)
由于您正在寻找速度,因此发电机可能不是最佳选择。生成器非常有用有几个原因,比如当你要 运行 内存不足时,或者当你在得到下一个答案之前有额外的处理要做时。
为了加快处理 1000 项甚至数百万项的速度:您需要使用 pandas 系列。 (因为 1000 项将适合您机器的内存。)
import pandas as pd
files = pd.Series([r'C:\temp\OK\somefile_1234_nw.tif',
r'C:\temp\test\CA\somefile_1234_nw.tif',
r'C:\temp\OK\somefile_9999_nw.tif'])
pattern2 = 'CA'
pattern1 = 'somefile_1234_nw.tif'
mask1 = files.str.contains(pattern1)
files2 = files[mask1]
mask2 = files2.str.contains(pattern2)
files2[mask2].values
我想听听您的数据的时间安排。
我有一个文件列表--前两个文件名相同,但目录路径不同。目录路径中还包含状态代码(例如 CA 或 OK)。
files = [r'C:\temp\OK\somefile_1234_nw.tif',
r'C:\temp\test\CA\somefile_1234_nw.tif',
r'C:\temp\OK\somefile_9999_nw.tif']
我可以使用以下生成器表达式提取具有特定文件名的第一个文件:
search_string = 'somefile_1234_nw.tif'
print next((s for s in files if search_string in s), None)
如何使用生成器表达式提取包含两个搜索字符串('CA' 和 'somefile_1234_nw.tif')中的项目的文件?在这种情况下,处理效率很重要,因为我的放大问题有数千个项目。
预期输出是:
'C:\temp\test\CA\somefile_1234_nw.tif'
你的意思是这样的吗?
>>> next((s for s in files if all(i in s for i in['somefile_1234_nw.tif', 'CA'])), None)
'C:\temp\test\CA\somefile_1234_nw.tif'
all()
检查迭代器中的所有元素是否都是 True
,如果是,return True
,否则,return False
.
像这样的东西应该可以工作:
search_strings = ['somefile_1234_nw.tif', 'CA']
print next((s for s in files if all([search_string in s for search_string in search_strings])), None)
由于您正在寻找速度,因此发电机可能不是最佳选择。生成器非常有用有几个原因,比如当你要 运行 内存不足时,或者当你在得到下一个答案之前有额外的处理要做时。
为了加快处理 1000 项甚至数百万项的速度:您需要使用 pandas 系列。 (因为 1000 项将适合您机器的内存。)
import pandas as pd
files = pd.Series([r'C:\temp\OK\somefile_1234_nw.tif',
r'C:\temp\test\CA\somefile_1234_nw.tif',
r'C:\temp\OK\somefile_9999_nw.tif'])
pattern2 = 'CA'
pattern1 = 'somefile_1234_nw.tif'
mask1 = files.str.contains(pattern1)
files2 = files[mask1]
mask2 = files2.str.contains(pattern2)
files2[mask2].values
我想听听您的数据的时间安排。