добавление существующей строки в txt-файл

У меня есть программа для хранения имени лица и его оценки в файле txt на python.

например, это мой текущий код:

name = input("Name: ") score = input("Score: ") file_name = "student_scores.txt" file = open(file_name , 'a') file.write(str(name) + ", " + str(score) + "\n") file.close() 

Выходной файл txt: (name = bob) и (оценка = 1):

 bob, 1 

Когда я вхожу в другой счет (2) для одного и того же человека (bob), txt-файл выглядит так:

 bob, 1 bob, 2 

Однако как я могу изменить свой код, так что txt-файл выглядит так:

 bob, 1, 2 

3 Solutions collect form web for “добавление существующей строки в txt-файл”

Храните данные существующего файла в словаре с именем в качестве ключа и списком баллов как значения. Этот код будет хранить существующие данные в словаре, добавлять к нему новый балл и записывать словарь в файл с правильным форматированием.

 import os from collections import defaultdict def scores_to_dict(file_name): """Returns a defaultdict of name / list of scores as key / value""" if not os.path.isfile(file_name): return defaultdict(list) with open(file_name, 'r') as f: content = f.readlines() content = [line.strip('\n').split(', ') for line in content] temp_dict = {line[0]: line[1:] for line in content} d = defaultdict(list) d.update(temp_dict) return d name = input("Name: ") score = input("Score: ") d = scores_to_dict('student_scores.txt') d[name].append(score) with open('student_scores.txt', 'w') as f: for k, v in d.items(): f.write(', '.join([k] + v) + '\n') 

К сожалению, с обычными текстовыми файлами вам нужно будет переписать содержимое файла, чтобы вставить его в середину. Вы можете просто обработать файл, чтобы получить нужный результат в конце, а не вставлять его в середину файла.

Вы не можете добавить к строке, однако вы можете перезаписать часть строки. Если вы оставите кучу пробелов в конце строки, чтобы вы могли записать, например, 5 баллов и обновить строку на месте. Для этого откройте файл «rw» для чтения-записи, затем прочитайте до тех пор, пока вы не прочитаете строку оценки боба. Затем вы можете искать назад по длине линии bob и переписывать ее своими новыми оценками.

Тем не менее, если нет конкретной причины использовать текстовый формат, вам будет лучше использовать файл базы данных sqlite.

  • python может кодировать utf-8, но не может декодировать
  • асинхронный доход от параллельных фьючерсов. Будущее исполнителя
  • Python 3 - Может ли мариновать байтовые объекты размером более 4 ГБ?
  • Django: проблемы с импортом пользовательского класса Python3
  • Должен ли я вернуть None или (None, None)?
  • Преобразование списка в dict в серию
  • Аргумент Tornado - '_xsrf' отсутствует в POST
  • TypeError: Отсутствует 1 обязательный позиционный аргумент: 'self'
  •  
    Interesting Posts for Van-Lav

    Верхний индекс в графиках Python

    Как выдавать команды на удаленных хостах параллельно с использованием Fabric без использования fabfile?

    Python: os.path.getmtime () для временных меток TZ, происходящих из SD-карт с различными форматами

    Можно ли получить произвольный неупорядоченный набор именованных групп одним махом с модулем re-python?

    Выбор уникальных наблюдений в кадре данных панд

    Как я могу «посмотреть» файл для изменения / изменения?

    Добавить Jar в автономный pyspark

    Как вы PEP 8 называете класс, чье имя является аббревиатурой?

    Боги цикла снова нападают – Как сохранить сокет, несмотря на GUI mainloop?

    Метод getbbox из библиотеки изображений python (PIL) не работает

    Каковы некоторые стратегии для поддержания общей схемы базы данных с командой разработчиков и без администратора баз данных?

    Работа с двоеточием в селекторах BeautifulSoup CSS

    Как удалить все ведущие и завершающие знаки препинания в Python?

    Нелинейная свертка в Теано

    Что делает «mro ()»?

    Python - лучший язык программирования в мире.