0

1.从buildlocation获取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
4

2 回答 2

1

反斜杠正在转义'字符(请参阅转义码文档

试试这条线:

 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]
于 2012-11-14T00:50:08.617 回答
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
于 2012-11-14T00:52:22.837 回答