使用输入python更改文件的一部分

2024-05-29 07:33:03 发布

您现在位置:Python中文网/ 问答频道 /正文

在txt文件中,数据的写入方式如下:

  • A1 |礼堂1 |保护
  • A2 |礼堂1 |保护

A1代表礼堂的标签,礼堂1代表说明,Prote G代表地址。现在,我想做一个功能,用新的标签替换礼堂的标签。我想使用输入:

def label_change():
    label_old = input("Enter label u wanna change: ")
    label_new = input("Enter new one: ")
    with open("aud.txt","r") as f1:
        for i in f1.readlines():
            r = i.split("|")
            label = r[0]
            desc = r[1]
            adr = r[2]
            if label_old == label:
                label_new = label
                #now not sure how to continue

例如,如果我将A1作为旧标签输入,将A5作为新标签输入,我是否可以用A5替换A1,而不删除或更改文件中的描述和地址?在此之后,我尝试以“w”模式打开文件,这样我就可以写了,但它会删除每一行,“a”模式会添加整行,而不是更改想要的标签。有没有更简单的方法


Tags: 文件txtnewinput地址a1代表标签
2条回答

您不能轻松地就地修改文件,而是更容易将其写入新文件。如果您一次只想更改一件事,这将起作用:

def label_change():
    label_old = input("Enter label u wanna change: ")
    label_new = input("Enter new one: ")
    with open("aud.txt","r") as f1, open("mod_aud.txt","w") as outFile:
        for i in f1.readlines():
            label,desc,adr = i.split("|") # decompose directly
            if label == label_old:
                label = label_new
        outFile.write('|'.join( [label,desc,adr] )

如果要更改多个标签,最好是读入所有行,修改直到满意为止,然后重新写出所有行

您必须将数据保存在一个行列表中,并且可以简单地将以A1开始的每一行替换为同一行,但以A2开始

您也可以在python中进行重命名/删除:

import os
os.remove(someFileName) # delete a file (your old one)
os.rename(old_name, new_name)

事后考虑:

您可以使用

for i in fi.readlines():
    if i.startswith(label_old):
        outFile.write(label_new + i[len(label_old):]) # string slicing
    else:
        outFile.write(i)

您只需将其写回文件,就可以在与f1相同的行中打开它,然后使用f2.write()将新行写入其中:

def label_change():
    label_old = input("Enter label u wanna change: ")
    label_new = input("Enter new one: ")
    with open("aud.txt","r") as f1, open("aud2.txt", "w") as f2:
        for i in f1.readlines():
            r = i.split("|")
            label = r[0]
            desc = r[1]
            adr = r[2]
            if label_old == label:
                label = label_new
            f2.write(label + "|" + desc + "|" + adr)

为了写入同一文件,您可以将内容保存到列表中,然后写入:

def label_change():
    label_old = input("Enter label u wanna change: ")
    label_new = input("Enter new one: ")
    contents = []
    with open("aud.txt","r") as f1:
        for i in f1.readlines():
            r = i.split("|")
            label = r[0]
            desc = r[1]
            adr = r[2]
            if label_old == label:
                label = label_new
            contents.append(label + "|" + desc + "|" + adr)
    with open("aud.txt", "w") as f1:
        for line in contents:
            f1.write(line)

相关问题 更多 >

    热门问题