1.从构建位置获取buildid,这是“\”之后的最后一个单词,在这种情况下是“A1234ABCDE120083.1”
2.获取buildid后,打开一个文件,然后尝试匹配“Engr Label:Data_CRM_PL_177999”行以获取标签名称“Data_CRM_PL_177999”
3.最终输出应为“Data_CRM_PL_177999”
由于某种原因,我收到以下语法错误..
import re
Buildlocation= '\\umor\locations455\INT\A1234ABCDE120083.1'
Labelgetbuildlabel(Buildlocation)
def getbuildlabel(BuildLocation):
buildid=BuildLocation.split('\')[-1]
Notes=os.path.join(BuildLocation,Buildid + '_notes.txt')
if os.path.exists(Notes):
try:
open(Notes)
except IOError as er:
pass
else:
for i in Notes.splitlines:
if i.find(Engr Label)
label=i.split(:)[-1]
print label//output should be Data_CRM_PL_177999
输出应为: -
Line looks like below in the file
Engr Label: Data_CRM_PL_177999
语法错误
buildid=BuildLocation.split('\')[-1]
^
SyntaxError: EOL while scanning string literal
答案 0 :(得分:1)
反斜杠正在逃避'
字符(请参阅escape codes documentation)
请尝试使用此行:
buildid=BuildLocation.split('\\')[-1]
现在你有一个反斜杠转义反斜杠,所以你的字符串是一个字面反斜杠。你可以做的另一件事是告诉Python这个字符串没有任何转义码,前缀为r
,如下所示:
buildid=BuildLocation.split(r'\')[-1]
你也有很多其他问题。
Python中的注释字符为#
,而不是//
。
我认为您还会将文件名与文件对象混淆。
Notes
是您尝试打开的文件的名称。然后,当您调用open(Notes)
时,您将获得一个可以从中读取数据的文件对象。
所以你应该替换:
open(Notes)
与
f = open(Notes)
然后替换:
for i in Notes.splitlines:
与
for line in f:
当您对文件对象进行for循环时,Python会自动为您提供一行。
现在你可以检查每一行:
if line.find("Engr Label") != -1:
label = line.split(':')[-1]
答案 1 :(得分:1)
在第
行buildid=BuildLocation.split('\')[-1]
反斜杠实际上是通过以下引号转义的 所以,Python认为这实际上是你的字符串:
'[-1])
相反,您应该执行以下操作:
buildid=BuildLocation.split('\\')[-1]
Python会将你的字符串解释为
\\
有趣的是,StackOverflow的语法高亮显示提示了这个问题。如果您查看代码,它会在第一个斜杠之后将所有内容视为字符串的一部分,一直到代码示例的结尾。
您的代码中还有其他一些问题,所以我尝试为您清理一下。 (但是,我没有该文件的副本,所以显然,我无法对此进行测试)
import re
import os.path
build_location= r'\\umor\locations455\INT\A1234ABCDE120083.1'
label = get_build_label(build_location)
# Python prefers function and variable names to be all lowercase with
# underscore separating words.
def get_build_label(build_location):
build_id = build_location.split('\\')[-1]
notes_path = os.path.join(build_location, build_id + '_notes.txt')
# notes_path is the filename (a string)
try:
with open(notes_path) as notes:
# The 'with' keyword will automatically open and close
# the file for you
for line in notes:
if line.find('Engr Label'):
label = line.split(':')[-1]
return label
except IOError:
# No need to do 'os.path.exists' since notes_path doesn't
# exist, then the IOError exception will be raised.
pass
print label