Перезапись части файла приводит к пустой строке Python 3
EDIT: решение было просто изменить, как я открывал файл (спасибо Primusa), а не как я заменял информацию.
Я пытаюсь перезаписать части файла, но мой код не работает. Когда он запускается, он полностью стирает все в файле, не оставляя ничего позади.Вот мой код:
for fname in store:
with open(fname + ".txt", "w+") as f:
for line in f:
c = store[fname]
x = (c-1)%len(line.split(","))
y = m.floor((c-1)/len(line.split(",")))
for n in range(y):
f.readline()
ldata = line.strip("n").split(",")
for i in range(len(ldata)):
ldata[i] = int(ldata[i])
if w == None:
ldata[x] += 1
elif w == True:
ldata[x] += 2
elif w == False:
ldata[x] -= 1
#s = line.find("n") - 1
#f.truncate(s)
f.write(str(ldata) + "n")
Ключ:
-
fname
: строковая переменная, соответствующая имени файла без типа файла. -
store
: a словарь, содержащий ключи имен файлов в виде строк и целых чисел. -
f
: файл, содержащий несколько строк целочисленных списков. -
c
: целочисленная переменная, используемая для определения целого числа, к которому необходимо получить доступ. -
x
иy
: переменные со значениями, заданными в виде столбца и строки (соответственно) целого числа, доступ к которому осуществляется в файле. -
w
: переменная, хранящаяся либо как логическое значение, либо какNone
, используемая для определения того, должно ли полученное целое число увеличиваться или уменьшиться, и на сколько. -
s
: неиспользуемая в данный момент целочисленная переменная, используемая для усечения части файла.
Пример использования:
Предположим, у меня есть файлFoo.txt
, в котором хранится следующая информация:
0,2,3,7
11,3,6,4
Я хочу увеличить значение "6" на 2, поэтому я запускаю код с w
, установленным в True
, и добавляю "Foo" : 7
к store
, так как "6" - это 7-е число в файле (независимо от списка длина).
Что должно произойти:
Foo.txt
модифицирован и теперь содержит:
0,2,3,7
11,3,8,4
Что на самом деле происходит:
Foo.txt
все еще существует, но теперь содержит:
То есть она пуста.
Что не так с моим кодом? Я неправильно обрабатываю файл, вычисления переменных, синтаксис или что-то еще?
1 ответ:
with open(fname + ".txt", "w+") as f:
Открытие файла в режиме "w+" приводит к усечению файла, что означает удаление всего, что в нем находится. Все операции, выполняемые после этой инструкции, выполняются с пустым файлом.
Я бы предложил открыть файл в режиме чтения:
with open(fname + ".txt", "r") as f:
Загрузка файла в память, внесение изменений, а затем открытие файла в режиме "w+" и возврат файла обратно.
Давайте сделаем это на примере foo:
with open("foo.txt", 'r') as f: #open in read mode a = f.read().split(',') #breaking it apart so i can locate the 6th number easier a[6] = str(int(a[6]) + 2) #make my modifications a = ','.join(a) #convert it back to string with open("foo.txt", 'w+') as f: #open in write and delete everything f.write(a) #write my modified version of the file
Обратите внимание, что это очень простой пример, поэтому он не принимает во внимание новые строки.