在文本文件中编辑一行

时间:2017-08-15 11:18:51

标签: python python-3.x text-files

我需要一个编辑功能,目前我有代码让用户输入一个id号码(与行号相同),然后写入某个文本文件,但不是替换输入的行,而是清除整个文件并且只保存编辑的条目。我如何更改我的代码,以便它只更改输入的行而不是删除文件中的所有数据。

import time
global idnum

def number():
    global idnum
    print()
    idnum = int(input("Enter the id number of who you want to edit: "))

def edit():
    number()
    num_lines = sum(1 for line in open('Surname'))
    print()
    if idnum> num_lines or idnum ==0 or idnum < 0:
        print("Not valid")
        time.sleep(0.5)
        print("Try again")
        print()
        time.sleep(0.2)
        again()
    else:
        print()
        for file in ["Gender"]:
            with open(file) as f:
                print(f.readlines()[idnum-1], end='')

def editgender():
    with open("Gender",'r') as f:
        get_all=f.readlines()
    with open("Gender",'w') as f:
        for i,line in enumerate(get_all,1):         ## STARTS THE NUMBERING FROM 1 (by default it begins with 0)    
            if i == idnum:             
                Gender = input("Enter new gender: ")
                f.writelines(Gender + "\n")
                print("Edit saved")
                print()

2 个答案:

答案 0 :(得分:1)

您的代码应该编辑为这样(在发生故障时):

if i == idnum:            
    Gender = input("Enter new gender: ")
    get_all=f.readlines()
    get_all[i-1]=Gender+"\n"
    f.write(''.join(get_all))
    print("Edit saved")
    print()

希望这有帮助! :)

答案 1 :(得分:1)

尝试使用&#39; a&#39;打开文件而不是&#39; w&#39;模式。从python文档:

最常用的模式值是&#39; r&#39;阅读,&#39; w&#39;用于写入(截断文件,如果它已经存在),以及&#39; a&#39; for appending(在某些Unix系统上意味着所有写入都附加到文件的末尾,而不管当前的搜索位置如何)。