• 文件操作作业


    # 1,有如下文件,a1.txt,里面的内容为:
    #
    # 老男孩是最好的培训机构,
    # 全心全意为学生服务,
    # 只为学生未来,不为牟利。
    # 我说的都是真的。哈哈
    #
    # 分别完成以下的功能:
    # a,将原文件全部读出来并打印。
    f = open('a1.txt', mode='r', encoding='utf-8')
    print(f.read())
    f.close()
    # b,在原文件后面追加一行内容:信不信由你,反正我信了。
    f = open('a1.txt', mode='a', encoding='utf-8')
    f.write('
    信不信由你,反正我信了。')
    f.flush()
    f.close()
    # c,将原文件全部读出来,并在后面添加一行内容:信不信由你,反正我信了。
    f = open('a1.txt', mode='r+', encoding='utf-8')
    print(f.read())
    f.write('
    信不信由你,反正我信了。')
    f.flush()
    f.close()
    # d,将原文件全部清空,换成下面的内容:
    #
    # 每天坚持一点,
    # 每天努力一点,
    # 每天多思考一点,
    # 慢慢你会发现,
    # 你的进步越来越大。
    f = open('a1.txt', mode='w', encoding='utf-8')
    # 注意三引号里面的内容第一行不要换行到下一行,否则文件里面会显示一行空行
    content = """每天坚持一点, 
    每天努力一点,
    每天多思考一点,
    慢慢你会发现,
    你的进步越来越大
    """
    f.write(content)
    f.flush()
    f.close()
    # e,将原文件内容全部读取出来,并在‘我说的都是真的。哈哈’这一行的前面加一行,‘你们就信吧~’然后将更改之后的新内容,写入到一个新文件:a1.txt。
    import os
    
    # 方法一:使用+拼接字符串
    with open("a1.txt", mode="r", encoding="utf-8") as f, 
         open("a1_副本.txt", mode="w", encoding="utf-8") as f2:
        for line in f:  # 1.遍历文件
            line = line.strip() # 这个要去空格,读取出来的每一行的内容里面是不会包含换行符
    的,只会在控制台打印的时候直接间隔一个空行
            if line == '我说的都是真的。哈哈': # 如果line 没有去空格的话,也不会有读出来的某一行等于'我说的都是真的。哈哈
    '
                # line = '你们就信吧~
    '.join([line]) # join是没办法使用的,join是迭代拼接,不是简单的拼接
                line = '你们就信吧~
    ' + line # 2.拿到修改好的内容
                print(line)
    
            f2.write(line+'
    ')  # 3. 把修改好的内容写入一个新文件
    # 4.删除原来文件
    os.remove("a1.txt")
    # 5.重命名副本为原来的文件名
    os.rename("a1_副本.txt", "a1.txt")
    
    # 方法二:使用replace替换
    # 就不用判断读到哪一行了,因为replace自身有个寻找的功能,符合第一个参数才替换,不符合不替换
    with open("a1.txt", mode="r+", encoding="utf-8") as r,
         open("a1_1.txt", mode="w", encoding="utf-8")as r1:
        for line in r:
            r1.write(line.replace("我说的都是真的。哈哈", "你们就信吧~
    我说的都是真的。哈哈"))
    os.remove("a1.txt")
    os.rename("a1_1.txt", "a1.txt")
    
    
    # 方法三:老师讲解的
    with open("a1.txt", mode="r+", encoding="utf-8") as f1,
         open("a1_1.txt", mode="w", encoding="utf-8")as f2:
        for line in f1:
            if line.strip() == '我说的都是真的。哈哈':  # 读到这一行之前先写入一行你需要的内容到f2文件中
                f2.write("你们就信吧~
    ")
            f2.write(line)
    os.remove("a1.txt")
    os.rename("a1_1.txt", "a1.txt")
    
    # 2,有如下文件,t1.txt,里面的内容为:
    #
    # 葫芦娃,葫芦娃,
    # 一根藤上七个瓜
    # 风吹雨打,都不怕,
    # 啦啦啦啦。
    # 我可以算命,而且算的特别准:
    # 上面的内容你肯定是心里默唱出来的,对不对?哈哈
    #
    # 分别完成下面的功能:
    # a,以r+的模式打开原文件,判断原文件是否可读,是否可写。
    
    # 之前不知道的
    with open('t1.txt', mode='r+', encoding='utf-8') as f:
        print(f.readable())
        print(f.writable())
    
    """
    # 以a的模式打开文件是没办法通过seek移动光标的,只能追加到文件的末尾
    
    with open('t1.txt', mode='a', encoding='utf-8') as f:
        f.seek(0)
        f.write('456789
    ') # 这里的内容还是追加到文件的末尾的
    """
    # b,以r的模式打开原文件,利用for循环遍历文件句柄。
    with open('t1.txt', mode='r', encoding='utf-8') as f:
        for line in f:
            print(line)
    
    # c,以r的模式打开原文件,以readlines()方法读取出来,并循环遍历        readlines(),并分析b,与c 有什么区别?深入理解文件句柄与            readlines()结果的区别。
    with open('t1.txt', mode='r', encoding='utf-8') as f:
        # print(f.readlines())
        for line in f.readlines():
            print(line)
    
    # d,以r模式读取‘葫芦娃’前三个字符。
    with open('t1.txt', mode='r', encoding='utf-8') as f:
        print(f.read(3))
    # e,以r模式读取第一行内容,并去除此行前后的空格,制表符,换行符。
    with open('t1.txt', mode='r', encoding='utf-8') as f:
        print(f.readline().strip())
    
    # f,以r模式打开文件,从‘风吹雨打.....’开始读取,一直读到最后。
    with open('t1.txt', mode='r', encoding='utf-8') as f:
        for line in f.readlines()[2:]:
            print(line.strip())
    # 老师讲解的
    with open('t1.txt', mode='r', encoding='utf-8') as f:
        f.readline()  # 前两行读取但是不打印
        f.readline()
        print(f.read())
    # g,以a+模式打开文件,先追加一行:‘老男孩教育’然后在从最开始将        原内容全部读取出来。
    with open('t1.txt', mode='a+', encoding='utf-8') as f:
        f.write('
    老男孩教育')
        f.seek(0)
        print(f.read())
    # h,截断原文件,留下内容:‘葫芦娃’
    with open('t1.txt', mode='r+', encoding='utf-8') as f:
        f.truncate(9)
        print(f.read())
    
    
    # 3,文件a.txt内容:每一行内容分别为商品名字,价钱,个数。
    #
    # apple 10 3
    # tesla 100000 1
    # mac 3000 2
    # lenovo 30000 3
    # chicken 10 3
    #
    # 通过代码,将其构建成这种数据类型:[{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 并计算出总价钱。
    #我写的
    lst = []
    sum = 0
    with open('a3.txt', mode='r', encoding='utf-8') as f:
        for line in f:
            dic = {}
            a, b, c = line.strip().split()  # split()括号内不传入参数,默认以一切的空白作为切割符
            sum += int(b) * int(c)
            dic['name'] = a
            dic['price'] = b
            dic['amount'] = c
            lst.append(dic)
    
    print(lst, sum)
    
    #老师写的
    lst = []
    sum = 0
    with open('a3.txt', mode='r', encoding='utf-8') as f:
        for line in f:
            a, b, c = line.strip().split()  # split()括号内不传入参数,默认就是以空白(一切相连的空白当成一个整体去)作为切割符
            sum += int(b) * int(c)
            dic = {'name':a, 'price':int(b), 'amout':int(c)}
            lst.append(dic)
    
    print(lst, sum)
    
    
    #
    # 4,有如下文件:
    #
    # alex是老男孩python发起人,创建人。
    # alex其实是人妖。
    # 谁说alex是sb?
    # 你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。
    #
    # 将文件中所有的alex都替换成大写的SB(文件的改的操作)。
    #
    import os
    with open("alex.txt", mode="r", encoding="utf-8")as f,
        open("alex_1.txt", mode="w", encoding="utf-8")as f1:
        for line in f:
            if "alex" in line:
                line = line.replace("alex", "SB")
            f1.write(line)
    os.remove("alex.txt")
    os.rename("alex_1.txt", "alex.txt")
    
    
    # 5,文件a1.txt内容(升级题)
    #
    # name:apple price:10 amount:3 year:2012
    # name:tesla price:100000 amount:1 year:2013
    # .......
    #
    # 通过代码,将其构建成这种数据类型:
    # [{'name':'apple','price':10,'amount':3},
    # {'name':'tesla','price':1000000,'amount':1}......]
    # 并计算出总价钱。
    lst = []
    sum = 0
    with open('a5.txt', mode='r', encoding='utf-8') as f:
        for line in f:
            dic = {}
            for el in line.strip().split():  # 得到每一行切割成的列表
                k, v = el.split(':')  # 得到每一行切割成的列表 中的每个元素切割成的列表的解包
                if k != 'year':
                    if v.isdigit():
                        dic[k] = int(v)
                    else:
                        dic[k] = v
            lst.append(dic)
            sum += dic['price'] * dic['amount']
    
    
    print(lst)
    print(sum)
    #
    #
    # 6,文件a1.txt内容(升级题)
    #
    # 序号     部门      人数      平均年龄      备注
    # 1       python    30         26         单身狗
    # 2       Linux     26         30         没对象
    # 3       运营部     20         24         女生多
    # .......
    #
    # 通过代码,将其构建成这种数据类型:
    # [{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},
    # ......]
    
    #不知道split()不传入参数的用法写的
    lst = []
    title = []
    
    with open('a6.txt', mode='r', encoding='utf-8') as f:
        title_ = f.readline().strip().split(' ')  # 字典的key的列表
        for el in title_:
            if len(el) != 0:
                title.append(el)
        # print(title)
        for line in f:  # 接着上面的readline读,所以是从第一行的结尾接着遍历文件
            dic = {}  # 每一行都需要一个空字典去装该行的数据
            data = []
            data_ = line.strip().split(' ')  # 字典的value的列表
            for da in data_:
                if len(da) != 0:
                    data.append(da)
            # print(data)
            for i in range(len(title)):  # 一个完整的for循环将一行的数据添加到字典中
                dic[title[i]] = data[i]
            lst.append(dic)
    print(lst)
    
    #老师讲解的,利用split()不传入参数默认以空白作为切割符的特性
    # 打开文件
    f = open("t6", mode="r", encoding="utf-8")
    # 处理标题 ['序号', '部门', '人数', '平均年龄', '备注']
    title = f.readline().strip().split()
    print(title)
    # 准备存放结果的列表
    lst = []
    
    # 获取到数据
    for line in f: # line :  1       python    30         26         单身狗
        data = line.strip().split() # 切割处理 [1,python,30,26,单身狗]
        dic = {}
        # 循环标题的索引. 标题的索引和数据的索引是一一对应的
        for i in range(len(title)):
            dic[title[i]] = data[i] # 把数据获取到, 放在字典中
        lst.append(dic) # 把字典装列表
    print(lst)
    
    # 明日默写:
    # 就是第4题的代码(课上讲过)。
    import os
    with open("alex.txt",mode="r",encoding="utf-8")as f,
        open("alex_1.txt",mode="w",encoding="utf-8")as f1:
        for line in f:
            line = line.replace("alex","SB")
            f1.write(line)
    os.remove("alex.txt")
    os.rename("alex_1.txt","alex.txt")
    # a,将原文件全部读出来并打印。
    f = open("a1.txt", mode="r", encoding="utf-8")
    print(f.read())
    f.close()
    
    # b,在原文件后面追加一行内容:信不信由你,反正我信了。
    f = open("a1.txt", mode="a", encoding="utf-8")
    f.write("信不信由你,反正我信了")
    f.close()
    
    # c,将原文件全部读出来,并在后面添加一行内容:信不信由你,反正我信了。
    f = open("a1.txt", mode="r+", encoding="utf-8")
    print(f.read())
    f.write("信不信由你,反正我信了")
    f.close()
    
    
    # d,将原文件全部清空,换成下面的内容:
    # 每天坚持一点,
    # 每天努力一点,
    # 每天多思考一点,
    # 慢慢你会发现,
    # 你的进步越来越大。
    
    f = open("a1.txt", mode="w", encoding="utf-8")
    f.write("每天坚持一点,
    ")
    f.write("每天努力一点,
    ")
    f.write("每天多思考一点,
    ")
    f.write("慢慢你会发现,
    ")
    f.write("你的进步越来越大。
    ")
    f.flush()
    f.close()
    
    # e,将原文件内容全部读取出来,
    # 并在‘我说的都是真的。哈哈’这一行的前面加一行,‘你们就信吧~’
    # 然后将更改之后的新内容,
    # 写入到一个新文件:a1.txt。
    import os
    
    with open("a1.txt", mode="r", encoding="utf-8") as f1, 
            open("a1.txt_副本", mode="w", encoding="utf-8") as f2:
        for line in f1:
            if line.strip() == "我说的都是真的。哈哈":
                f2.write("你们就信吧~
    ")
            f2.write(line)
    
    os.remove("a1.txt")
    os.rename("a1.txt_副本", "a1.txt")
    
    
    
    # a,以r+的模式打开原文件,判断原文件是否可读,是否可写。
    f = open("t1.txt", mode="w", encoding="utf-8")
    print(f.readable())
    print(f.writable())
    # b,以r的模式打开原文件,利用for循环遍历文件句柄。
    f = open("t1.txt", mode="r", encoding="utf-8")
    for line in f:
        print(line)
    # c,以r的模式打开原文件,以readlines()方法读取出来,并循环遍历
    #  readlines(),并分析b,与c 有什么区别?深入理解文件句柄与
    # readlines()结果的区别。
    f = open("t1.txt", mode="r", encoding="utf-8")
    for line in f.readlines():
        print(line)
    # d,以r模式读取‘葫芦娃’前三个字符。
    f = open("t1.txt", mode="r", encoding="utf-8")
    print(f.read(3))
    # e,以r模式读取第一行内容,并去除此行前后的空格,制表符,换行符。
    f = open("t1.txt", mode="r", encoding="utf-8")
    print(f.readline().strip())
    # f,以r模式打开文件,从‘风吹雨打.....’开始读取,一直读到最后。
    f = open("t1.txt", mode="r", encoding="utf-8")
    f.readline()
    f.readline()
    content = f.read()
    print(content)
    
    # g,以a+模式打开文件,先追加一行:‘老男孩教育’然后在从最开始将
    #         原内容全部读取出来。
    f = open("t1.txt", mode="a+", encoding="utf-8")
    f.write('
    老男孩教育')
    f.seek(0)
    print(f.read())
    
    # h,截断原文件,留下内容:‘葫芦娃’
    f = open("t1.txt", mode="r+", encoding="utf-8")
    f.truncate(9)
    
    
    # 3,文件t3内容:每一行内容分别为商品名字,价钱,个数。
    
    f = open('t3', mode="r", encoding="utf-8")
    lst = []
    for line in f:
        a, b, c = line.split() # 默认就是按照空白切割
        dic = {"name":a, "price":int(b), "amout":int(c)}
        lst.append(dic)
    print(lst)
    
    # 4. 把文件中的alex替换成sb
    import os
    with open("t4", mode="r", encoding="utf-8") as f1, 
            open("t4_副本", mode="w", encoding="utf-8") as f2:
        for line in f1:
            line = line.replace("alex", "sb")
            f2.write(line)
    os.remove("t4")
    os.rename("t4_副本", "t4")
    
    
    # 6.
    # 打开文件
    f = open("t6", mode="r", encoding="utf-8")
    # 处理标题 ['序号', '部门', '人数', '平均年龄', '备注']
    title = f.readline().strip().split()
    print(title)
    # 准备存放结果的列表
    lst = []
    
    # 获取到数据
    for line in f: # line :  1       python    30         26         单身狗
        data = line.strip().split() # 切割处理 [1,python,30,26,单身狗]
        dic = {}
        # 循环标题的索引. 标题的索引和数据的索引是一一对应的
        for i in range(len(title)):
            dic[title[i]] = data[i] # 把数据获取到, 放在字典中
        lst.append(dic) # 把字典装列表
    print(lst)
    
    
    # 5.
    f = open("t5", mode="r", encoding="utf-8")
    result = []
    for line in f: # name:apple price:10 amount:3 year:2012
        dic = {} # 每行是一个字典
        lst = line.split()
        for el in lst: # name:apple
            k, v = el.split(":")
            if k != 'year':
                dic[k] = v
        result.append(dic)
    print(result)
    
    # 计算总价
    # [{'name': 'apple', 'price': '10', 'amount': '3'}, {'name': 'tesla', 'price': '100000', 'amount': '1'}]
    sum = 0
    for d in result:
        sum += int(d['price']) * int(d['amount'])
    print(sum)
    View Code
  • 相关阅读:
    android 中文 api (43) —— Chronometer
    SVN客户端清除密码
    Android 中文 API (35) —— ImageSwitcher
    Android 中文API (46) —— SimpleAdapter
    Android 中文 API (28) —— CheckedTextView
    Android 中文 API (36) —— Toast
    Android 中文 API (29) —— CompoundButton
    android 中文 API (41) —— RatingBar.OnRatingBarChangeListener
    Android 中文 API (30) —— CompoundButton.OnCheckedChangeListener
    Android 中文 API (24) —— MultiAutoCompleteTextView.CommaTokenizer
  • 原文地址:https://www.cnblogs.com/lyfstorm/p/11154878.html
Copyright © 2020-2023  润新知