2016-08-08 59 views
0

Neu bei Python. Ich teste gerade Dateien aus und versuche eine Zahl (als rohe Eingabe) in eine Datei zu schreiben. Dann möchte ich, dass eine Funktion diese Zahl als Eingabeparameter verwendet und eine Gleichung damit ausführt.Odd Zeichen erscheint beim Schreiben in eine Datei

Aus irgendeinem Grund erscheint beim Schreiben in die Datei ein seltsames Zeichen. Als ich versuchte, es zu kopieren, um es nachzuschlagen, kopierte es einfach als dieser komische Zahlenblock oder als ein leerer Raum. weird character in notepad

Hier ist mein Code so weit:

def function(x): 
    y = x + 1 
    return y 

Input = raw_input('Number?') 

with open('in_test.txt','w+') as inFile_test: 
    inFile_test.write(Input) 
    lines = inFile_test.readline() 
    lines_int = [int(x) for x in lines.split()] 
    print str(lines_int) 

f_test = function(lines_int) 
print str(f_test) 

ich auch das Dateiformat versucht haben + r ändern, den Codierungstyp in Notepad (ANSI) Überprüfung, und den Fehler aufzublicken, die aufkommt .

lines_int = [int(x) for x in lines.split()] 
ValueError: invalid literal for int() with base 10: '\x02' 

Ich gehe davon aus den Fehlern durch die seltsamen Zeichen verursacht wird, aber ich bin mir nicht sicher, was das seltsame Zeichen verursacht.

+0

Warum verwenden Sie keine UTF-Codierung? – Trimax

+0

Versuchen Sie 'line.encode ('utf-8')' vor der Initialisierung von 'line_int' hinzuzufügen – dhdavvie

Antwort

0

Sie müssen den Dateizeiger an den Anfang zurücksetzen. Sie können die aktuelle Position des Dateizeigers mit der Funktion tell() überprüfen.

with open('in_test.txt','w+') as inFile_test: 
    inFile_test.write(Input) 
    print inFile_test.tell() 
    inFile_test.seek(0) # re-position the file pointer to the beginning 
    lines = inFile_test.readline() 
    lines_int = [int(x) for x in lines.split()] 
    print str(lines_int) 

Auch der Aufruf von function() falsch ist, haben Sie es definiert einen int zu akzeptieren, aber es mit einer Liste Argument nennen.

+0

Danke, das das Zeichen Problem behoben. Ich dachte, der Code in deiner Zeile 6 sollte das beheben, eine Zeichenfolge/Liste nehmen und sie in ein int umwandeln? – Cyanidies

+0

Das Listenverständnis erstellt ein Listenobjekt. So Lines_int ist eine Liste von Int-Typen. Der Aufruf kann also entweder function (lines_int [0]) sein, oder Sie können die Liste wie folgt entpacken --- function (* lines_int) –