首页 > 解决方案 > Python 2.7 搜索行或字符串以查找命中但不是单词的一部分

问题描述

我有一个小 python 脚本,它基本上搜索文本文件的行,然后返回该行的剥离版本(带有我正在寻找的数值)。

为此,我得到一个用户输入 (ui),它成为我搜索文本文件每一行的搜索。

我遇到的问题是我似乎无法找到一种方法来防止它返回不是完整单词的命中。例如,如果用户搜索“apple”,我不希望它返回包含“applesauce”的行。

我相信一种解决方案是将整行转换为单个单词的列表,然后在列表中搜索准确的命中。这会是最好的方法,还是有一个简单的论点我可以在更容易的地方使用?

对不起,我的代码在其他人眼里可能是一团糟。我只是一个有一些基本 VBA 经验的初学者,现在正在尝试 python,它似乎在这些任务中运行得更快。

提前致谢!

#Ask for user input for variable name
print("Type variable name to be found:")    
ui = raw_input()

#use userinput as name of file to be written
write_file = ("C:\\temp\\" + ui + ".csv")

for i in cmd_line_args:
    with open(i) as dump:
        lines = dump.readlines()
        for line in lines:
            if ui.lower() in line.lower():
                line = line.replace(ui,"")
                line = line.replace("=","")

            b = ("abcdefghijklmnopqrstuvwxyz()?!£$:;@##_")
            for char in b:
                line = line.replace(char,"")
            line = line.replace(" ","")

            with open(write_file, "a") as f:
                f.write(line)
            print(line)

print("Operation complete, check " + write_file)

os.system('pause')

根据要求大大简化了样本数据:

Tested 18/01/10
USER mafs1f


ted       =     1.040864            Description
frm2      =     1.082459            Description
orm       =     0.4688  %         Description
orm2      =     -0.0469  %         Description
AFS       =     15.000  kg/h      Description
msjfg     =     7.500  kg/h      Description
msdg      =     7.500  kg/h      Description
EnvJ      =     978.00  hPa       Description
Engfh     =     1.9  degC      Description
pact      =     499.600  kPa       Description

标签: pythonstringpython-2.7search

解决方案


您可能需要对代码进行两次修改。首先,尝试:

line = line.split(" ")

这可以确保字符串被拆分为假设" "是您的分隔符的单词。如果还有其他分隔符,您可能必须迭代地指定它们以分解中的每个子字符串line

其次,您可以使用==运算符来检查返回列表中的单词。

这是一个小片段。

>>> x = "apple applesause"
>>> x.split(" ")
['apple', 'applesause']
>>> x.split(" ")[0] == "apple" 
True
>>> x.split(" ")[1] == "apple" 
False

编辑 1: 使用您共享的特定文件,首先读取文件

>>> file = open("path/to/file", "r")   
>>> contents = file.read()

然后按行拆分内容

>>> lines = contents.split("\n")
>>> line = lines[4].split(" ")
>>> line
['ted', '', '', '', '', '', '', '=', '', '', '', '', '1.040864', '', '', '', '', '', '', '', '', '', '', '', 'Description']

您也可以通过以下方式清洁线路line.remove("", "anythingelseyouwantgone")

要检查数字是否为数字,您可以使用函数(请注意,这不是非常优雅或高效,因此不建议在大行上使用)

>>> def is_number(s):
...     try:
...         float(s)
...         return True
...     except ValueError:
...         return False

然后您可以检查该行是否为数字:

>>> for i in line:
...     print( is_number(i))
... 
False
False
False
False
False
False
False
False
False
False
False
False
True
False
False
False
False
False
False
False
False
False
False
False
False
>>> 

所以现在你必须在你点击时返回数值True


推荐阅读