2015-03-01 2 views
0

Я видел действительно сложные ответы на этом веб-сайте, как отредактировать определенную строку в файле, но мне было интересно, есть ли простой способ сделать это? Я хочу найти имя в файле, и в строке, где я нахожу это имя, я хочу добавить целое число в конец строки (так как это оценка для викторины). Или вы могли бы рассказать мне, как я могу заменить всю строку новыми данными? Я пробовал много кодирования, но никаких изменений не было, или все данные в файле удаляются. Я попробовал это ....Как добавить значение к определенной строке в файле в python?

with open ('File.py', 'r') as class_file: 
     for number, line in enumerate(class_file): 
      if name in line: 
       s=open('File.py', 'r').readlines() 
       s[number]=str(data) 
       class_file=open('File.py', 'w') 
       class_file.writelines(new_score) 
       class_file.close() 

Как и эта функция ....

def replace (file, line_number, add_score): 
    s=open(file, 'w') 
    new_data=line[line_number].replace(line, add_score) 
    s.write(str(new_data)) 
    s.close() 

Как это ...

def replace_score(file_name, line_num, text): 
    new = open(file_name, 'r').readlines() 
    new[line_num] = text 
    adding_score= open(file_name, 'w') 
    adding_score.writelines(new) 
    adding_score.close() 

Но я все еще могу» t заставить его работать. Последний код работает, если я пытаюсь заменить первую строку, но не остальные.

+0

Не могли бы вы принять мой ответ? –

+0

Я думаю, что я принял его сейчас :) @Tim Osadchiy –

ответ

1

Вам необходимо получить содержимое файла. Закройте файл. Измените содержимое и перепишите файл с измененным контентом. Попробуйте следующее:

def replace_score(file_name, line_num, text): 
    f = open(file_name, 'r') 
    contents = f.readlines() 
    f.close() 

    contents[line_num] = text+"\n" 

    f = open(file_name, "w") 
    contents = "".join(contents) 
    f.write(contents) 
    f.close() 

replace_score("file_path", 10, "replacing_text") 
+0

Большое вам спасибо, но по какой-то причине он не работает. Являются ли обновленные данные предназначены для отправки в файл test_data, поскольку они остаются пустыми, а затем в исходном файле, который я пытаюсь изменить, данные все еще просто добавляются в конец файла. Кроме того, что делает «» .join? @Tim Osadchiy –

+0

Мне очень жаль. Я исправил свой ответ. Обновленный ответ отправляется указанному файловому имени. «" .join (содержимое) присоединяет измененный список строк из файла в одну строку (строку). –

+0

Wow я чувствую себя так плохо, потому что я все время спрашиваю вас, но снова он просто добавляет оценку в конец файла вместо замены. Это мой питон не работает? Этот код выглядит так, как будто он должен работать @Tim Osadchiy –

1

Это код Тима Осадчий в:

def replace_score(file_name, line_num, text): 
    f = open(file_name, 'r') 
    contents = f.readlines() 
    f.close() 

    contents[line_num] = text+"\n" 

    f = open(file_name, "w") 
    contents = "".join(contents) 
    f.write(contents) 
    f.close() 

replace_score("file_path", 10, "replacing_text") 

Этот код работает, но только помните, что line_num всегда будет один над номером фактической линии (как это показатель) , Итак, если вы хотите, чтобы строка 9 затем вводилась 8, а не 9. Также не забудьте поставить .txt в конце пути к файлу (я бы прокомментировал, но не имею достаточно высокой репутации)

+0

Thankyou. Я понял, что раньше ошибался в своей программе, которая мешала этому работать. @Zeldor –