如何打开文件并找到最长的一行,然后将其打印出来

时间:2009-08-18 08:46:06

标签: python

这是我到目前为止所做的,但长度功能不起作用。

import string

def main():
    print " This program reads from a file and then prints out the"
    print " line with the longest length the line ,or with the highest sum"
    print " of ASCII values , or the line with the greatest number of words"
    infile = open("30075165.txt","r")
    for line in infile:
        print line
    infile.close()
def length():
    maxlength = 0
    infile = open("30075165.txt","r")
    for line in infile:
        linelength = lengthofline
        if linelength > maxlength:
            #If linelength is greater than maxlength value the new value is linelength
            maxlength = linelength
            linelength = line
    print ,maxlinetext
    infile.close()

6 个答案:

答案 0 :(得分:27)

对于Python 2.5到2.7.12

print max(open(your_filename, 'r'), key=len)

对于Python 3及更高版本

print(max(open(your_filename, 'r'), key=len))

答案 1 :(得分:6)

large_line = ''
large_line_len = 0
filename = r"C:\tmp\TestFile.txt"

with open(filename, 'r') as f:
    for line in f:
        if len(line) > large_line_len:
            large_line_len = len(line)
            large_line = line

print large_line

输出:

This Should Be Largest Line

作为一个功能:

def get_longest_line(filename):
    large_line = ''
    large_line_len = 0

    with open(filename, 'r') as f:
        for line in f:
            if len(line) > large_line_len:
                large_line_len = len(line)
                large_line = line

    return large_line

print get_longest_line(r"C:\tmp\TestFile.txt")

这是另一种方法,你需要将它包装在try / catch中以解决各种问题(空文件等)。

def get_longest_line(filename):
    mydict = {}

    for line in open(filename, 'r'):
        mydict[len(line)] = line

    return mydict[sorted(mydict)[-1]]

当你有两条相同长度的“获胜”线时,你还需要决定这种情况吗?先选还是最后?前一个函数将返回第一个,后者将返回最后一个。 文件包含

Small Line
Small Line
Another Small Line
This Should Be Largest Line
Small Line

更新

原帖中的评论:

print " This program reads from a file and then prints out the"
print " line with the longest length the line ,or with the highest sum"
print " of ASCII values , or the line with the greatest number of words"

让我觉得你要扫描文件的行长,然后是ascii sum 对于单词数量。最好一次读取文件,然后从结果中提取所需的数据。

def get_file_data(filename):
    def ascii_sum(line):
        return sum([ord(x) for x in line])
    def word_count(line):
        return len(line.split(None))

    filedata = [(line, len(line), ascii_sum(line), word_count(line)) 
                for line in open(filename, 'r')]

    return filedata

此函数将以以下格式返回文件每行的列表:line, line_length, line_ascii_sum, line_word_count

这可以这样使用:

afile = r"C:\Tmp\TestFile.txt"

for line, line_len, ascii_sum, word_count in get_file_data(afile):
    print 'Line: %s, Len: %d, Sum: %d, WordCount: %d' % (
        line.strip(), line_len, ascii_sum, word_count)

输出:

Line: Small Line, Len: 11, Sum: 939, WordCount: 2
Line: Small Line, Len: 11, Sum: 939, WordCount: 2
Line: Another Small Line, Len: 19, Sum: 1692, WordCount: 3
Line: This Should Be Largest Line, Len: 28, Sum: 2450, WordCount: 5
Line: Small Line, Len: 11, Sum: 939, WordCount: 2

您可以将其与Steef的解决方案混合使用:

>>> afile = r"C:\Tmp\TestFile.txt"
>>> file_data = get_file_data(afile)
>>> max(file_data, key=lambda line: line[1]) # Longest Line
('This Should Be Largest Line\n', 28, 2450, 5)
>>> max(file_data, key=lambda line: line[2]) # Largest ASCII sum
('This Should Be Largest Line\n', 28, 2450, 5)
>>> max(file_data, key=lambda line: line[3]) # Most Words
('This Should Be Largest Line\n', 28, 2450, 5)

答案 2 :(得分:1)

试试这个:

def main():
    print " This program reads from a file and then prints out the"
    print " line with the longest length the line ,or with the highest sum"
    print " of ASCII values , or the line with the greatest number of words"
    length()

def length():
    maxlength = 0
    maxlinetext = ""
    infile = open("30075165.txt","r")
    for line in infile:
        linelength = len(line)
        if linelength > maxlength:
            #If linelength is greater than maxlength value the new value is linelength
            maxlength = linelength
            maxlinetext = line
    print maxlinetext
    infile.close()

编辑:添加了main()函数。

答案 3 :(得分:0)

linelength = lengthofline # bug?

应该是:

linelength = len(line) # fix

答案 4 :(得分:0)

Python可能不适合这项工作。

$ awk 'length() > n { n = length(); x = $0 } END { print x }' 30075165.txt

答案 5 :(得分:0)

我的解决方案(也适用于Python 2.5):

import os.path

def getLongestLineFromFile(fileName):
    longestLine = ""

    if not os.path.exists(fileName):
        raise "File not found"

    file = open(fileName, "r")
    for line in file:
        if len(line) > len(longestLine):
            longestLine = line

    return longestLine


if __name__ == "__main__":
    print getLongestLineFromFile("input.data")

示例“input.data”内容:

111111111
1111111111111111111111
111111111
22222222222222222
4444444444444444444444444444444
444444444444444
5555