Заменить определенное значение в определенном месте в текстовом файле в Python

1

Я хочу закодировать что-то, что заменит определенное значение на определенной строке в текстовом файле (thefile.txt). Я долго искал решение своей проблемы, но не нашел ее.
Вот код, который я написал:

clist = [1, 2, 0, 0, 0, 0]
with open("thefile.txt", "w") as dataFile:
    for line in dataFile:
        (key, val1, val2 ,val3, val4, val5) = line.split()
        if key == clist[0]:                               #Find correct line
            line = line.replace(val1, clist[1])           #Replace the value I want, but not the others

Мой текстовый файл выглядит так:

1 0 0 0 13 0
2 9 4 5 2 3
3 0 0 4 0 0

По какой-то причине это не работает. Я все еще новичок на python, поэтому я считаю, что проблема может заключаться в том, что я попытался "прочитать" файл в режиме записи (line.split). Я не знаю, будет ли line.split для каждой строки рассматриваться как чтение.

Теги:
file
list
python-3.x

3 ответа

0
Лучший ответ

Это должно помочь. В вашем примере вы не записываете обновленный контент обратно в файл.

Демо - версия:

clist = [1, 2, 0, 0, 0, 0]
res = []
with open("thefile.txt") as dataFile:                    #Read file
    for line in dataFile:
        (key, val1, val2 ,val3, val4, val5) = line.split()
        if int(key) == clist[0]:                               #Find correct line
            res.append(line.replace(val1, str(clist[1])))      #Replace content and append to res
        else:
            res.append(line)

with open("thefile.txt", "w") as dataFile:                #Write back to file.
    for line in res:
        dataFile.write(line)
  • 0
    Это не сработало, val1 не заменяется clist [1] в res
  • 0
    try: if int(key) == clist[0]: также использовать res.append(line.replace(val1, str(clist[1])))
0

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

Прочитайте файл в строке за строкой, как вы делаете (но установите режим 'r' для чтения) и напишите каждую строку (измененную или нет) на новый файл, который вы открываете в режиме 'w' для записи.

0

У вас пустой результат, не так ли? И исходный файл, вероятно, тоже пуст, верно?

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

Если вы хотите прочитать файл, откройте его для чтения. (режим "r"). Если вам нужно обновить файл, откройте его для добавления данных ("режим") или для режима обновления (варианты "+", поэтому "w+" или "r+").

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню