python - 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
解决方案
您可能需要对代码进行两次修改。首先,尝试:
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
推荐阅读
- constructor - Three.js THREE.DeviceOrientationControls 不是构造函数
- java - 没有最后一个节点的 LinkedList 的实现
- django - 将数据从两个模型传递到一个 html 页面 - Django
- javascript - 如何根据登录的用户角色禁用 HTML 文档的某些元素?
- java - 如何从 S3 加载 spring application.yml
- windows - 如何从提升的 AHK 脚本启动未提升的 exe?
- qt - 如何添加可以在 ubuntu 桌面(gnome)和活动上显示的 QT 应用程序图标
- powershell - Powershell - 向每一行添加一个字符串
- php - 如何在 intelephense 中定义一个未定义的函数(在 VSCode 中)?
- reactjs - 尝试导入错误:“useTranslation”未从“react-i18next”导出