У меня есть текстовый файл, как показано ниже

Мо, М, 15,

Jen, F, 14

Мой код ниже заменяет возраст на «Мо»

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

Как потом будет выглядеть файл

[ ' ,, М ,, ,, О М ,, 2 , , ,, 0 ' , ]

Как мне отформатировать его так:

Мо, М, 20,

0
A.Wolf 8 Дек 2016 в 19:38

5 ответов

Лучший ответ

Вы можете попробовать это вместо этого:

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)

Если вы особенно внимательны к пробелу в конце последнего элемента, вы можете даже сделать:

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)
0
YashTD 8 Дек 2016 в 17:04

Я предпочитаю использовать простоту. Просто используйте строковый модуль. Вы можете использовать это таким образом.

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)

Я надеюсь, что это помогает!

0
MSU_Bulldog 8 Дек 2016 в 17:14

Используйте модуль csv как для чтения, так и для записи файла. Ниже приведен проверенный пример.

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)
1
Vorsprung durch Technik 8 Дек 2016 в 18:25

Как упомянуто @azalea, используйте .split (','). Кроме того, вы должны использовать символ новой строки только в строках, которые вы строите, потому что существующие строки уже содержат новую строку.

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
Justin Bell 8 Дек 2016 в 16:55

Вы разделяете строку пробелом ... тогда вы должны присоединиться к ней пробелом!

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
Zahra Rhmn 8 Дек 2016 в 17:10