2016-04-29 9 views
2

Ich kann meiner Liste keine Nummer hinzufügen, die ich in einer Textdatei habe und weiß nicht wie.Wie füge ich eine vom Benutzer eingegebene Nummer in meine Textdateiliste ein?

-Code bisher:

def add_player_points(): 
# Allows the user to add a points onto the players information. 

    L = open("players.txt","r+") 
    name = raw_input("\n\tPlease enter the name of the player whose points you wish to add: ") 
    for line in L: 
      s = line.strip() 
      string = s.split(",") 
      if name == string[0]: 
        opponent = raw_input("\n\t Enter the name of the opponent: ") 
        points = raw_input("\n\t Enter how many points you would like to add?: ") 
        new_points = string[7] + points 
    L.close() 

Dies ist ein Beispiel eines Schlüssels in der Textdatei. Es gibt etwa 100 in der Datei:

Joe,Bloggs,[email protected],01269 512355, 1, 0, 0, 0, 
                 ^ 

Der Wert, den ich diese Zahl möchte hinzugefügt wird die 0 neben der Nummer ist bereits dort in durch einen Pfeil darunter angezeigt. Die Textdatei heißt wie gezeigt players.txt.

Eine vollständige Codeantwort wäre hilfreich.

Antwort

0

ich nicht mochte, was Ich schrieb früher, und der Anwendungsfall ist nicht optimal für fileinput. Ich habe ein ähnliches Stück Code aus den Quellen genommen und es für Ihre Bedürfnisse angepasst.

Beachten Sie, dass Sie für jede Zeile, die Sie ändern, eine ganze Datei neu schreiben. Ich empfehle dringend, die Art und Weise, wie Sie mit Daten umgehen, zu ändern, wenn Leistung eine Rolle spielt.

Dieser Code funktioniert tho.

from tempfile import mkstemp 
from shutil import move 
from os import remove, close 

def add_player_points(): 
    file_path = "test.txt" 
    name = raw_input("\n\tPlease enter the name of the player whose points you wish to add: ") 
    #Create temp file 
    fh, abs_path = mkstemp() 
    with open(abs_path,'w') as new_file: 
     with open(file_path) as old_file: 
      for line in old_file: 
       stripped_line = line.strip() 
       split_string = stripped_line.split(",") 
       print name == split_string[0] 
       if name == split_string[0]: 
        opponent = raw_input("\n\t Enter the name of the opponent: ") 
        points = raw_input("\n\t Enter how many points you would like to add?: ") 
        temp = int(split_string[5]) + int(points) # fool proofing the code 
        split_string[5] = str(temp) 
        stripped_line = ','.join(split_string)# line you shove back into the file. 
        print stripped_line 
        new_file.write(stripped_line +'\n') 
       else: 
        new_file.write(line) 
    close(fh) 
    #Remove original file 
    remove(file_path) 
    #Move new file 
    move(abs_path, file_path) 
  1. Search and replace a line in a file in Python

  2. Editing specific line in text file in python

Sie würden es so groß ein Problem zu sein, nicht erwarten, aber es ist.

Ein weiterer Tipp: Vielleicht wollen Sie das Modul csv überprüfen - es könnte klüger für die Dateibearbeitung sein als das, was ich hier gezeigt habe.

+0

Ich finde, dass dieser Code meine Textdatei löscht. Ich habe versucht, damit herumzutüfteln, aber ohne Erfolg :( – Toby

+0

Vielen Dank für die Hilfe :) Sehr geschätzt – Toby

-1

2 Probleme, zuerst speichern Sie Ihre Änderungen nie in der Datei. Sie müssen die Zeichenfolge erstellen und dann am Ende mit L.write ("Ihre neue Zeichenfolge") speichern. Zweitens müssen Sie die Punkte zu ints werfen, bevor sie das Hinzufügen, Ändern

new_points = string[7] + points 

zu

new_points = int(string[7]) + int(points) 

Edit: Der Fehler, der Syntax, wie in den Kommentaren erwähnt

+1

Ich schlage vor, einen Blick auf die Syntax von Funktionsaufrufen zu werfen. – TigerhawkT3

+0

'new_points = int (string [7]) + int (Punkte)' – Olegp

Verwandte Themen