我有一个小的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
答案 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
时返回数字值