Найти - Пользователи
Полная версия: Запись/чтение в файл
Начало » Python для новичков » Запись/чтение в файл
1 2 3 4
also1
Здравствуйте. Подскажите пожалуйста, как умнее сделать:
Скрипт открывает файл, читает первую строку, производит некоторые вычисления с ней и записывает полученный результат в новую строку (вниз) Как можно заставить, или что-б новый результат записывался в новую строку сверху, или заставить считывать последнюю строку в файле??
Каждая строка- одно число float
FishHook
почитайте документацию по функции open, там описаны все режимы открытия файла
py.user.next
also1
Скрипт открывает файл, читает первую строку, производит некоторые вычисления с ней и записывает полученный результат в новую строку (вниз)
Лучше вот это чтение из файла и сразу запись в файл не делать. Если программа упадёт посередине выполнения, то ты исходный файл оставишь в повреждённом виде.

also1
Подскажите пожалуйста, как умнее сделать:
Это всё нужно делать в новый файл, а потом первый файл стереть и вместо него новый файл поместить. Если программа упадёт посередине, то с исходным файлов всё в порядке останется.
also1
Нужного не нашел. Если можно, ткните пальцем ссылку.
also1
py.user.next
Запись происходит только после выполнения (Ну это я так понимаю)
Вот мое первое творение. хочу сделать, чтоб в файлах сохранялась бы не только последнее значение, а вся история показаний и оплат.
 with open("text.txt", 'r', encoding='utf-8') as f:
    st_pok = f.read()
    print("Старые показания: ", st_pok, 'KWt')
    st_pok = int(st_pok)
    pok = int(input("Введите показания: "))
    if pok < st_pok:
        print("Не правильно введены показания. Повторите ввод")
        print("Старые показания", st_pok)
        exit()
rashod = pok - st_pok
print("Расход", rashod, 'KWt')
pok = str(pok)
with open("text.txt", 'w', encoding='utf-8') as f:
    f.write(pok)
tarif = 4.65
print('Сумма к оплате: ', "%.2f" % (rashod * tarif), ' руб.')
with open("many.txt", 'r', encoding='utf-8') as f:
    saldo = f.readline()
    saldo = float(saldo)
    print("Было на счете: ", saldo, 'Руб.')
    print("Можно оплатить: ", "%.2f" % (rashod * tarif - saldo), 'Руб.')
    opl = float(input("Введите сумму: "))
    saldo = "%.2f" % (opl + saldo - rashod * tarif)
    print("На балансе осталось: ", saldo, 'Руб.')
    saldo = str(saldo)
with open("many.txt", 'w', encoding='utf-8') as f:
    f.writelines(saldo + '\n')
q = input("Для закрытия нажмите любую клавишу")
py.user.next
also1
Вот мое первое творение. хочу сделать, чтоб в файлах сохранялась бы не только последнее значение, а вся история показаний и оплат.
Лучше задание напиши словами. Этот код даже средним нельзя назвать.

Напиши несколько вводных данных:
1) Что у тебя есть? Исходные данные.
2) Что ты хочешь получить? Результирующие данные.
3) Как ты хочешь из того, что есть, получить то, что нужно в результате? Процедура преобразований.
also1
py.user.next
Этот код даже средним нельзя назвать.
Я догадываюсь. Только начинаю изучать python/
Это калькулятор оплаты электроэнергии
1 Текущее показание, тариф, историю показаний, остаток на счете
2 Сумму к оплате, с учетом остатка, запись в файлы показаний и суммы за этот период
3 Логику я вижу так: открывается файл, выводится старые показания, ввод новых показаний, расчет суммы с выводом и учетом из второго файла остатка на счете, ввод суммы платежа, расчет и вывод остатка на счете, запись в первый файл нового показания (без уничтожения старых), запись во второй файл остатка на счете
В принципе все работает, только не могу сохранять историю. В файл записывается либо одно число, либо дописываются строки, но прочитать последнюю не получается
doza_and
:(
Оперировать строками в файле плохая идея, тем более искать последнюю.
Писать нестандартные форматы данных плохая идея.
pok = int(input(“Введите показания: ”)) Заставлять пользователя корпеть в консоли плохая идея лучше отредактировать в приятном текстовом редакторе файл понятной структуры
tarif = 4.65 - хадкодить параметры можно, но не в России.
q = input(“Для закрытия нажмите любую клавишу”) - плохая идея. Не улавливаю даже смысл зачем так делать.

Вот что может например получиться:
 import json
import os
history = "history.json"
last_rec = "last_rec.json"
new_rec = "new_rec.json"
#получили новые данные
with open(new_rec,"r") as f:
    rec =json.load(f) # {"money":100,"count":353,"price":2}
#получили старые данные
if os.path.exists(last_rec):
    with open(last_rec,"r") as f:
        last =json.load(f) #{"money": -140, "count": 353, "price": 2}
else:
    last={"money":0,"count":rec["count"]}
#выполнили действия
rec["money"] += last["money"] - rec["price"] * (rec["count"] - last["count"])
#записали лог
with open(history,"a") as f:
    json.dump(last,f)
    f.write("\n")
#записали последнее состояние
with open(last_rec,"w") as f:
    json.dump(rec,f)
py.user.next
also1
Это калькулятор оплаты электроэнергии
Пришли файл ввода. Пришли полученный из файла ввода файл результата. И объясни как из файла ввода получаешь файл результата. Объясни, по какому принципу ты это сам делаешь, без программы, а дальше уже можно будет сделать программу, которая делает эти все действия вместо тебя - автоматизирует процесс.
doza_and
py.user.next
по какому принципу ты это сам делаешь, без программы
Я бы тут добавил. “Адаптируй решение задачи под возможности языка программирования”. Программа почти всегда очень сильно отличатся от действий человека. Составлять входной json с подписыванием всех полей никто не будет. Просто в калькулятор циферку запишут, а программно запихать циферку в калькулятор будет ой как не просто. Человеку последнюю запись из файла раз плюнуть взять. А в программе целый огород для этого вырастет. Поэтому при автоматизации проще отдельный файл записать. и т.д. и т.п.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB