So öffnen Sie eine Datei und finden die längste Länge einer Zeile und drucken sie dann aus

Hier ist was ich bisher gemacht habe, aber die Längenfunktion funktioniert nicht.

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 Solutions collect form web for “So öffnen Sie eine Datei und finden die längste Länge einer Zeile und drucken sie dann aus”

Für Python 2.5 und höher

 print max(open(your_filename, 'r'), key=len) 
 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 

Ausgabe:

 This Should Be Largest Line 

Und als Funktion:

 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") 

Hier ist ein anderer Weg, du müsst das in einem try / catch für verschiedene Probleme (leere Datei, etc.) wickeln.

 def get_longest_line(filename): mydict = {} for line in open(filename, 'r'): mydict[len(line)] = line return mydict[sorted(mydict)[-1]] 

Sie müssen auch entscheiden, dass passiert, wenn Sie zwei "gewinnende" Linien mit gleicher Länge haben? Wählen Sie zuerst oder letzte? Die vorherige Funktion wird die erste zurückgeben, die letztere wird die letzte zurückgeben. Datei enthält

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

Aktualisieren

Der Kommentar in deinem Originalpost:

 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" 

Ich glaube, du wirst die Akte für die Länge der Zeilen scannen, dann für die Ascii Summe, dann für die Anzahl der Wörter. Es wäre wahrscheinlich besser, die Datei einmal zu lesen und dann extrahieren, welche Daten du von den Ergebnissen benötigst.

 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 

Diese Funktion gibt eine Liste jeder Zeile der Datei im Format: line, line_length, line_ascii_sum, line_word_count

Dies kann so verwendet werden:

 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) 

Ausgeben:

 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 

Du kannst das mit der Lösung von Steef wie folgt mischen:

 >>> 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) 

Versuche dies:

 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() 

EDIT: Added main () – Funktion.

 linelength = lengthofline # bug? 

Es sollte sein:

 linelength = len(line) # fix 

Python könnte nicht das richtige Werkzeug für diesen Job sein.

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

Meine Lösung (funktioniert auch in 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") 

Beispiel "input.data" Inhalt:

 111111111 1111111111111111111111 111111111 22222222222222222 4444444444444444444444444444444 444444444444444 5555 
Python ist die beste Programmiersprache der Welt.