python文件操作中的增加、读取、删除、修改、查找

在上一篇博文里有介绍简单的文件操作,而这一篇是在上一篇的基础上延伸的。百变不离其中,让我们继续往下看。

代码背景:我最近在写一个乞丐版的学生信息管理系统,主要实现录入,查看,修改,删除,搜索,清空学生信息等功能。所以代码中会用class类初始化学生信息各参数,字符串拼接成一整串信息,并存储在文件student.txt中

出席嘉宾:[file object].write(),,,,[file object].readlines()

                   [file object].seek() 将文件光标移到指定位置。0是起始点, 1是当前所处位置,2是终点

                   [string].replace(old_info,new_info) 用新的子串代替老子串

                   [file object].truncate()  从文件光标所处位置起截断(删除)下面的内容                 

1. 在文件中添加新内容。那肯定是调用我们经常使用的write方法

class StudentInfo:
    def __init__(self, name, stuid, gender, age, major, tel):
        self.name = name
        self.stuid = stuid
        self.gender = gender
        self.age = age
        self.major = major
        self.tel = tel

    def info(self):
        # 字符串的拼接
        msg = self.name + ' ' + self.stuid + ' ' + self.gender + self.age + ' ' + self.major + ' ' + self.tel + '\n'
        return msg
def add():
    # the file has been created , aappending,and will be closed automatically
    with open('student.txt', 'a') as f:
        name = input("Name: ")
        stuid = input("Student ID: ")
        gender = input("1.Male  2.Female : ")
        age = input("Age: ")
        major = input("Major: ")
        tel = input("Telephone: ")
        student = StudentInfo(name, stuid, gender, age, major, tel)
        f.write(student.info())

2. 读取文件中的全部内容。read方法走起~

def view():
    with open("student.txt", 'r') as f:
        lines = f.readlines()
        for line in lines:
            print(line)

3. 删除文件中特定一行的信息。这个是文件操作中最精髓的地方,搞懂了这个,其他的操作都可以迎刃而解。

这里要特别注意f.seek(0)的位置。在写代码的时候贪方便,直接省略了lines = f.readlines()这个操作,而是写成了for line in f.readlines(),发现不对头了,文本多复制了一遍,第二遍要删的是删掉了,可是跟预期的不一样啊,那只能是f.seek(0)和f.truncate() 没起作用了。为什么呢,因为我后面的for line in f.readlines()将文件光标又移动到了文件的末尾,我在末尾将除了要删的信息外复制了一遍,f.truncate()将在由光标起始处起删除,可是此刻已经是文件的末尾,这个方法相当于没进行操作。

故改为了lines = f.readlines(),这样的话,光标移到了文件起始处,在起始处复制了除要删除的信息外的其他信息,光标位于新旧信息之间,最后,f.truncate()将原始信息删掉了。

def delete():
    discard = input("delete the info you want: ")
    with open('student.txt', 'r+') as f:
        lines = f.readlines()
        f.seek(0)
        for line in lines:
            if discard not in line:
                f.write(line)
        f.truncate()

4. 修改文件内容跟删除类似,但是多了一些操作,用字符串处理方法将要修改的信息改正过来了再写入文件。

def revise():
    revise_line = input("show the info line: ")
    with open('student.txt', 'r+') as f:
        lines = f.readlines()
        f.seek(0)
        for line in lines:
            if revise_line in line:
                print(line)
                old_info = input("old info: ")
                new_info = input("new info: ")
                line = line.replace(old_info, new_info)
                f.write(line)
            else:
                f.write(line)
        f.truncate()

5. 相信看懂了前面部分的你,这个查找函数就是小case了。

def research():
    search = input("info you want to search: ")
    with open("student.txt", 'r') as f:
        lines = f.readlines()
        for line in lines:
            if search in line:
                print(line)

 

你可能感兴趣的:(Python,python,文件操作,删除文件中特定一行)