Python 2.7在行或字符串中搜索命中但不是单词的一部分

时间:2019-01-11 01:47:19

标签: python string python-2.7 search

我有一个小的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

1 个答案:

答案 0 :(得分:2)

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

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")

清理行

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

>>> 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时返回数字值