python习题,关于文件操作的练习

习题1

有如下文件,a1.txt,里面的内容为:
老男孩是最好的学校,
全心全意为学生服务,
只为学生我未来,不为牟利.
我说的都是真的.哈哈
分别完成以下功能:

  1. 将源文件全部读出来并打印
  2. 在源文件后面追加一行内容:信不信由你,反正我信了.
  3. 将源文件全部读出来,并在后面添加一行内容:信不信由你,反正我信了.
  4. 将源文件全部清空,换成下面内容:
    每天坚持一点,
    每天努力一点,
    每天多思考一点,
    慢慢你会发现
    你的进步越来越大.
with open('a1.txt', encoding='utf-8', mode='r+') as f1:
    content = f1.read()
    print(f'文件内容:\n{content}')
    f1.write('信不信由你,反正我信了.')
    f1.flush()

with open('a1.txt', encoding='utf-8', mode='r+') as f1:
    content = f1.read()
    print(f'文件内容:\n{content}')
    f1.write('信不信由你,反正我信了.')
    f1.flush()

txt = """每天坚持一点,
每天努力一点,
每天多思考一点,
慢慢你会发现
你的进步越来越大."""
with open('a1.txt', encoding='utf-8', mode='w') as f1:
    f1.write(txt)
    f1.flush()
# 运行结果:
# 老男孩是最好的学校,
# 全心全意为学生服务,
# 只为学生我未来,不为牟利.
# 我说的都是真的.信不信由你,反正我信了.信不信由你,反正我信了.
# 文件内容:
# 老男孩是最好的学校,
# 全心全意为学生服务,
# 只为学生我未来,不为牟利.
# 我说的都是真的.信不信由你,反正我信了.信不信由你,反正我信了.信不信由你,反正我信了.
习题2

有如下文件,t1.txt里面的内容为:
葫芦娃,葫芦娃
一根藤上七个瓜
风吹雨打,都不怕
啦啦啦啦.
我可以算命,而且算的特别准:
上面的内容你肯定是心里默唱出来的,对不对?哈哈
分别完成下面功能:

  1. 以r的模式打开源文件,利用for循环遍历文件句柄
  2. 以r的模式打开源文件,以readlines()方法读出来,并循环遍历readlines(),并分析1与2有什么区别,深入理解文件句柄与readlines()结果的区别
  3. 以r模式读取'葫芦娃',前四个字符
  4. 以r模式读取第一行内容,并除去此行前后的空格、制表符、换行符.
  5. 以a+模式打开文件,先追加一行:'老男孩教育'然后在从最开始将原内容全部读取出来
with open('t1.txt', encoding='utf-8') as f1:
    print(f'文件内容1:')
    for line in f1:
        print(f'{line}', end='')

with open('t1.txt', encoding='utf-8') as f1:
    content = f1.readlines()
    print(f'\n文件内容2:\n{content}', end='')
    print(f'\n文件内容3:')
    for line in content:
        print(line, end='')

with open('t1.txt', encoding='utf-8') as f1:
    content = f1.read(4)
    print(f'\n文件内容4:\n{content}', end='')

with open('t1.txt', encoding='utf-8') as f1:
    content = f1.readline().strip()
    print(f'\n文件内容5:\n{content}', end='')

with open('t1.txt', encoding='utf-8', mode='a+') as f1:
    old_position = f1.tell()
    f1.write('老男孩教育')
    f1.seek(0)
    print(f'\n源文件内容6:')
    while True:
        content = f1.read(1)
        new_position = f1.tell()
        if new_position == old_position:
            break
        print(content, end='')

# 运行结果
# 文件内容1:
# 葫芦娃,葫芦娃
# 一根藤上七个瓜
# 风吹雨打,都不怕
# 啦啦啦啦.
# 文件内容2:
# ['葫芦娃,葫芦娃\n', '一根藤上七个瓜\n', '风吹雨打,都不怕\n', '啦啦啦啦.']
# 文件内容3:
# 葫芦娃,葫芦娃
# 一根藤上七个瓜
# 风吹雨打,都不怕
# 啦啦啦啦.
# 文件内容4:
# 葫芦娃,
# 文件内容5:
# 葫芦娃,葫芦娃
# 源文件内容6:
# 葫芦娃,葫芦娃
# 一根藤上七个瓜
# 风吹雨打,都不怕
# 啦啦啦啦
习题3

文件a.txt内容:每一行内容分别为商品名字,价钱,个数.
apple 10 3
tesla 100000 1
mac 3000 2
lenovo 30000 3
chicken 10 3

通过代码,将其构建成这种类型:[{'name': 'apple', 'price': 10, 'amount': 3}...]并计算出总价钱

info_list = []
with open('a.txt', encoding='utf-8') as f1:
    for line in f1:
        name, price, amount = line.strip('\n').split()
        info = {}
        info['name'] = name
        info['price'] = price
        info['amount'] = amount
        info_list.append(info)
print('商品总览:')
s = 0
for i in info_list:
    print(f'{i}')
    s += int(i['price']) * int(i['amount'])
print(f'商品总价:{s}')
# 商品总览:
# {'name': 'apple', 'price': '10', 'amount': '3'}
# {'name': 'tesla', 'price': '100000', 'amount': '1'}
# {'name': 'mac', 'price': '3000', 'amount': '2'}
# {'name': 'lenovo', 'price': '30000', 'amount': '3'}
# {'name': 'chicken', 'price': '10', 'amount': '3'}
# 商品总价:196060
习题4

有文件a2.txt内容如下::
alex是老男孩python发起人,创建人.
alex其实是人妖,
谁说alex是sb?
你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质.
将文件中所有的alex都替换成大写的SB(文件的改的操作)

import os

with open('a2.txt', encoding='utf-8') as f1, \
        open('a2_bak.txt', encoding='utf-8', mode='w') as f2:
    for line in f1:
        if 'alex' in line:
            line = line.replace('alex', 'SB')
        f2.write(line)
    f2.flush()
os.remove('a2.txt')
os.rename('a2_bak.txt', 'a2.txt')

with open('a2.txt', encoding='utf-8') as f1:
    print('变更后的源文件a2内容:')
    for line in f1:
        print(line, end='')
#运行结果
# 变更后的源文件a2内容:
# SB是老男孩python发起人,创建人.
# SB其实是人妖,
# 谁说SB是sb?
# 你们真逗,SB再牛逼,也掩饰不住资深屌丝的气质.
习题5

文件a3.txt内容:
name:apple price:10 amount:3 year:2012
name:tesla price:100000 amount:1 year:2013
通过代码,将其构建成这种类型数据:
[{'name': 'apple', 'price': 10, 'amount': 3, 'year': 2012}
{'name': 'tesla', 'price': 100000, 'amount': 1, 'year': 2013]
并计算出总价钱.

info_list = []
with open('a3.txt', encoding='utf-8') as f1:
    for line in f1:
        info = {}
        for i in line.split():
            key, value = i.split(':')
            if value.isdecimal():
                value = int(value)
            info[key] = value
        info_list.append(info)
print(info_list)

s = 0
for i in info_list:
    s += i['price'] * i['amount']
print(f'商品的总价值为:{s}')
# 运行结果
# [{'name': 'apple', 'price': 10, 'amount': 3, 'year': 2012}, {'name': 'tesla', 'price': 100000, 'amount': 1, 'year': 2013}]
# 商品的总价值为:100030
习题6

文件a4.txt内容
序号 部门 人数 平均年龄 备注
1 Python 30 26 单身狗
2 Linux 26 30 没对象
3 运营部 20 24 女生多
......
通过代码将其构建成这种数据类型:
[{'序号': 1,'部门': 'Python', '人数': 30, '平均年龄': 26, '备注': '单身狗'}......]

info_list = []
with open('a4.txt', encoding='utf-8') as f1:
    flag = True
    while True:
        if flag:
            k = f1.readline().split()
            flag = False
            continue
        info = {}
        line = f1.readline().split()
        if not line:
            break
        for i in range(len(k)):
            if line[i].isdecimal():
                line[i] = int(line[i])
            info[k[i]] = line[i]
        info_list.append(info)
print('部门人员信息详情:')
for i in info_list:
    print(i)
#运行结果:
# 部门人员信息详情:
# {'序号': 1, '部门': 'Python', '人数': 30, '平均年龄': 26, '备注': '单身狗'}
# {'序号': 2, '部门': 'Linux', '人数': 26, '平均年龄': 30, '备注': '没对象'}
# {'序号': 3, '部门': '运营部', '人数': 20, '平均年龄': 24, '备注': '女生多'}
posted @ 2021-04-06 17:39  缘兮Fate  阅读(367)  评论(0编辑  收藏  举报