прочитайте заголовок и замените значение столбца на другое в Python - PullRequest
0 голосов
/ 28 февраля 2019

Я новичок в Python и пытаюсь прочитать файл в следующем формате

ORDER_NUMBER!Speed_Status!Days!
10!YES!100!
10!NO!100!
10!TRUE!100!

И вывод для записи в тот же файл

ORDER_NUMBER!STATUS!Days!
10!YES!100!
10!NO!100!
10!TRUE!100!

до сих пор я пытался

# a file named "repo", will be opened with the reading mode. 
file = open('repo.dat', 'r+') 
# This will print every line one by one in the file 
    for line in file: 
        if line.startswith('ORDER_NUMBER'):
            words = [w.replace('Speed_Status', 'STATUS') for w in line.partition('!')]
            file.write(words)
input()

Но как-то не работает.что мне не хватает.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Идеальный способ - использовать модуль fileinput для замены содержимого файла на месте, а не открывать файл в режиме обновления r+

from __future__ import print_function
import fileinput

for line in fileinput.input("repo.dat", inplace=True):
    if line.startswith('ORDER_NUMBER'):
        print (line.replace("Speed_Status", "STATUS"), end="")
    else:
        print (line, end="")

Почему ваша попытка не удалась?При этом логика формирования words совершенно неправильная, когда вы разбиваете строку на основе !, сформированный вами список не в порядке как ['ORDER_NUMBER', '!', 'STATUS!Days!\n'] со встроенной новой строкой.Кроме того, ваш write() вызов никогда не будет принимать объект не символьного буфера.Вам нужно привести его в строковый формат, чтобы распечатать.

0 голосов
/ 28 февраля 2019

Считать файл ⇒ заменить содержимое ⇒ записать в файл:

with open('repo.dat', 'r') as f:
    data = f.read()

data = data.replace('Speed_Status', 'STATUS')

with open('repo.dat', 'w') as f:
    f.write(data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...