Python多重搜索字符串功能

时间:2018-02-15 02:35:29

标签: python python-2.7

我有以下文件内容

apples:100
books:100
pens:200
banana:300

我在下面的代码中搜索文件中的字符串:

def search_string(file_search, search_string):

    search_output = []
    with open(file_search) as f:
        for line in f:
            if search_string in line:
                search_output.append(line)
     return search_output

搜索苹果:

  search_string("filename", "apples")

有些情况下,我要搜索两个或三个字符串取决于同一个文件中的要求,所以我需要编写单独的函数,或者我们可以实现相同的功能。如果同一个功能可以帮助

对于两个字符串搜索,我有以下代码:

def search_string2(file_search, search_string1, search_strin2):

    search_output = []
    with open(file_search) as f:
        for line in f:
            if search_string1 in line or search_string2 in line:
                search_output.append(line)
     return search_output

2 个答案:

答案 0 :(得分:2)

您可以使用varargs在单个函数中实现此功能,方法是使用前面的*命名一个参数,该参数会将所有其他位置参数收集到该名称下的tuple中。然后使用带有生成器表达式的any来概括测试以覆盖未知数量的搜索字符串:

def search_string(file_search, *search_strings):
    search_output = []
    with open(file_search) as f:
        for line in f:
            if any(searchstr in line for searchstr in search_strings):
                search_output.append(line)
    return search_output

这适用于少量搜索字符串,但如果您需要处理大量搜索字符串,请扫描大量输入或许多小输入,I'd suggest looking at more advanced optimizations, e.g. Aho-Corasick

答案 1 :(得分:-1)

只需声明string2 = None,然后:

const express= require('express');
const app = express();

app.get('/has-pipe',(req, res) => {
    const success = !!res.pipe; // true if res.pipe exists
    req.pipe(res) // Readable stream to Writable stream
    res.send({ success }); // returns true
})

const port = 3000
app.listen(port, () => console.log(`Example server running on port 3000`))