2017-11-22 6 views
-1

Ich bin nicht sicher, was ich falsch hier tun, den ganzen Tag verbrachte googeln und Python Bücher zu lesen ..Python len() Verwirrung

Ich habe die folgende Funktion:

def extract(inNo, inputFile2, outputFile): 
    ifile = open(inputFile2, 'r') 
    ofile = open(outputFile, 'w') 
    lines = ifile.readlines() 
    for line in lines: 
     print(str(len(line))) 
     if str(len(line)) == str(inNo): 
      ofile.write(line) 

I‘ Ich versuche zu verstehen, len(), ich bekomme seltsame Ergebnisse, wenn Sie es verwenden. Meine Eingabedatei ist die folgende:

1 
22 
333 
4444 
55555 
666666 
7777777 
88888888 

Nun, wenn ich '7' als inNo Variable verwenden, die Ausgabe (dh print) ich erhalte, ist:

2 
3 
4 
5 
6 
7 
8 
8 

und die Ausgabedatei wird :

666666 

ich bin sicher, python.exe Längenzählwert Start von 1, dh von der Überprüfung in:

len('123') 

würde ein Ergebnis von

3 

Ist mein Verständnis von len() falsch, oder bin Codierung ich es falsch?

Im Wesentlichen ist, was diese Funktion tut; es nimmt eine Eingabe, eine Ausgabe und eine Zeichenlänge als Argumente. Diese kommen von einer anderen Funktion und die 2. Funktion ruft diese mit Argumenten auf.

Diese Funktion liest Zeilen aus der Eingabedatei. Für jede Zeile erhält sie die Zeichenlänge und vergleicht sie mit der Eingabe Nr. Wenn sie gleich sind, sollte sie diese Zeile in die Ausgabedatei schreiben. Ich nehme an, da ich kein "sonst:" habe, sollte es die Iteration weiterführen. Die print() -Funktion ermöglicht es mir, genau zu sehen, was es als Länge berechnet hat.

Wenn ich versuche, '- 1' oder '+ 1' zum len() hinzuzufügen, d. H. (Len (line) + 1) verursacht es noch mehr seltsame Dinge zu passieren.

+2

'len (123)' ist nicht 3. 'len (123)' löst einen TypeError aus, da ganze Zahlen keine Länge haben. – user2357112

+6

Jede Zeile in Ihrer Eingabedatei endet mit einem Zeilenvorschubzeichen. Pythons readlines() -Funktion entfernt diese Zeilenenden nicht. Daher ist die Länge jeder Zeile 'charactersYouCanSee + 1', die Zeile' 666666' ist wirklich '666666 \ n' (' \ n' ist ein einzelnes Zeichen) – Bilkokuya

+0

bedenken Sie auch, dass ein '' \ n''-Zeichen an ist jede Linie. Verwenden Sie einen Editor, der Zeilenumbrüche zeigt –

Antwort

4

len() berücksichtigt auch die neue Zeile Zeichen \n, deshalb erhalten Sie eine mehr in jeder Zeile mit Ausnahme der letzten.