2016-12-08 1 views
0

Ich habe eine Textdatei wie unterWie formatiere Liste in Textdatei?

Mo, M, 15,

Jen, F, 14

unter Mein Code

newAge = "20" 
result = "" 
with open("file.txt") as f: 
for line in f: 
    if line.lower().startswith("mo,"): 
     list = line.split() 
     list[2] = str(newAge) 
     line = ", ".join(list) 
    result += line + '\n' 
f = open("file.txt", 'w') 
f.write(result) 
f.close() 
das Alter für 'Mo' ersetzt

Wie auch immer die Datei danach aussieht

[, ',, M ,, o ,, M ,, 2, 0 ,,']

Wie ich es zu formatieren aussehen das:

Mo, M ,

+1

möchten Sie möglicherweise die Zeichenfolge angeben, mit der geteilt werden soll. d. h. list = line.split (',') – azalea

Antwort

0

Sie könnten versuchen, diese stattdessen:

newAge = "20" 
result = "" 
with open("file.txt") as f: 
    for line in f: 
     if line.lower().startswith("mo,"): 
      list = line.split() 
      list[2] = newAge 
      line = '' 
      for element in list: 
       line += str(element) 
       line += ', ' 
     result += line + '\n' 
with open('file.txt', 'w') as inf: 
    inf.write(result) 

Wenn Sie am Ende des letzten Elements insbesondere über den Raum, könnten Sie auch tun:

newAge = "20" 
result = "" 
with open("file.txt") as f: 
    for line in f: 
     if line.lower().startswith("mo,"): 
      list = line.split() 
      list[2] = newAge 
      line = '' 
      for index, element in enumerate(list): 
       line += str(element) 
       if not index is len(list) -1: 
        line += ', ' 
       else: 
        line += ',' 
     result += line + '\n' 
with open('file.txt', 'w') as inf: 
    inf.write(result) 
1

Verwenden Sie das Modul csv zum Lesen und Schreiben der Datei. Unten ist ein getestetes Beispiel.

newAge = ' 20' 
result = [] 
with open('file.txt','rb') as fin, open('file_out.txt','wb') as fou: 
    cr = csv.reader(fin) 
    cw = csv.writer(fou) 
    for line in cr: 
     if line[0].lower() == "mo": 
      line[2] = newAge 
     cw.writerow(line) 
+0

'csv' Modul ist ein Lebensretter besonders mit großen Daten-Dumps (zumindest aus meiner Erfahrung) – Chinny84

+0

Danke für Ihren Kommentar, @ Chinny84 – bernie

0

wie @azalea erwähnt, verwenden .split (','). Außerdem sollten Sie das Newline-Zeichen nur für die von Ihnen erstellten Strings verwenden, da die vorhandenen Strings bereits die neue Zeile enthalten.

newAge = "20" 
result = "" 
with open("file.txt") as f: 
    for line in f: 
     if line.lower().startswith("mo"): 
      list = line.split(', ') 
      list[2] = str(newAge) 
      line = ", ".join(list) + '\n' 
     result += line 
f = open("file2.txt", 'w') 
f.write(result) 
f.close() 
0

Sie spalten die Zeile für Zeile ... dann sollten Sie sich dem Raum anschließen!

newAge = "20" 
result = "" 
with open("file.txt") as f: 
    for line in f: 
     if line.lower().startswith("mo,"): 
      list = line.split() 
      list[2] = str(newAge) 
      line = " ".join(list)+"\n" 
     result += line 
f = open("file.txt", 'w') 
f.write(result) 
f.close() 
0

Ich bevorzuge es, es einfach zu halten. Benutze einfach das String-Modul. Sie können es auf diese Weise verwenden.

import string 

toFind = '15' 
newAge = '20' 
with open('file.txt','r') as f: 
    text = f.readlines() 
    text[0] = string.replace(text[0],toFind,newAge) 
with open('file.txt','w') as f: 
    for item in text: 
     f.write(item) 

Ich hoffe, das hilft!