查找文件中最长行之前的标签

Bri*_*ian 0 python string

我有一个遵循格式的文件

_line 1
this is a string on a line
_line 2
this is another string
_line 3
short line
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一些Python代码,以获取其下面字符串长度最长的字符串的_line X标签.你能帮我修改一下我的代码吗?这是我到目前为止所拥有的.

f = open('test.txt', 'r')
print f

read="null"
top_read_line_length="0"
topreadline="null"
for line in f:
    checkifread=line.find('line')
    if checkifread==1:
        print "Read label found"
        #means we are on a read line
        currentread=line
    else:
        #We are on a sequence line for currentread.
        currentlength=len(line)
        print currentlength
    print top_read_line_length

    if int(top_read_line_length) < int(currentlength):
        print topreadline
        topreadline=currentread#now topreadline label is the "_line" string
        topreadlinelength=int(currentlength)
        print topreadline

        #go to next line

print "Done"
print "Longest line is...."
print topreadline
Run Code Online (Sandbox Code Playgroud)

Ray*_*ger 8

如果你想要的只是文件中最长的一行(就像问题标题所说的那样),那么这个在现代Python中非常简单:

>>> max(open('test.txt'), key=len)
Run Code Online (Sandbox Code Playgroud)

  • 这只是找到最长线的长度,而不是问题所在的前面的"标签". (7认同)
  • @wim看看他想要什么.他希望这条生产线继续走最长的路线. (4认同)
  • 实际问题的答案如下所示.这就解决了主题中所述的问题,这个答案对OP以外的读者更有价值. (3认同)

Ray*_*ger 8

要获取最长行的标签,请构建标签到行长度的映射

在您的示例数据集中,看起来标签以"_line"开头,紧接着的对应行如下:

label2linelength = {}
for line in open('test.txt'):
    if line.startswith('_line '):
        label = line
    else:
        label2linelength[label] = len(line)
    lastline = line
print max(label2linelength.items(), key=lambda kv: kv[1])
Run Code Online (Sandbox Code Playgroud)

  • 第一个回答主题头中的问题(找到文件中最长行的长度).这是一个具有一定魔力的通用答案.第二个答案解决了请求体中陈述的更平凡的家庭作业风格问题.那个不太可能是普遍使用的,所以有两个答案. (2认同)
  • 我一直在stackoverflow上待了几天,现在仍在弄清楚。 (2认同)