今天把饭倒进黄焖鸡里,同桌上楼就拉肚子

时间:2022-07-03 20:28:25

今天把饭倒进黄焖鸡里,同桌上楼就拉肚子

今日主要内容

1. 文件操作 open() 文件句柄

open()打开一个文件, 获取的是文件句柄
read()
readline()
readlines()
write()

for line in f: 遍历文件中的内容

路径的问题:
	1. 绝对路径
		从磁盘根目录寻找
	2. 相对路径
		从当前程序运行的文件夹内寻找

2. 文件操作的相关模式Mode

r: 只读
w: 只写
a: 追加
r+:
w+:
a+:

非文本文件
rb
wb
ab

r+b
w+b
a+b

3. 相关操作

1. seek()移动光标(重点)
	seek(0) 开头
	seek(0,2) 移动到末尾
2. tell() 获取光标所在的位置
3. truncate() 截断文件

4. 文件修改

with open(xxx) as 句柄, \
	open(xxxxx)as xxx
不用手动关闭文件句柄

文件修改的步骤
	1. 从源文件中读取数据。
	2. 写入到副本文件中
	3. 删除源文件
	4. 把副本重命名成源文件
import os
os.remove()
os.rename()

是真的有点晕了

1,有如下文件,a1.txt,里面的内容为:

老男孩是最好的培训机构,
全心全意为学生服务,
只为学生未来,不为牟利。
我说的都是真的。哈哈

分别完成以下的功能:
a, 将原文件全部读出来并打印。
s = '''老男孩是最好的培训机构,
全心全意为学生服务,
只为学生未来,不为牟利。
我说的都是真的。哈哈'''
with open(r'a1.txt', mode='w', encoding='utf-8')as f:
for n in s:
f.write(n)
b, 在原文件后面追加一行内容:信不信由你,反正我信了。
add = '信不信由你,反正我信了。'
with open(r'a1.txt', mode='a', encoding='utf-8')as f:
f.writelines(add)
c, 将原文件全部读出来,并在后面添加一行内容:信不信由你,反正我信了。
with open(r'a1.txt', mode='r+', encoding='utf-8')as f:
print(f.read())
f.write(add)
d, 将原文件全部清空,换成下面的内容:
每天坚持一点,
每天努力一点,
每天多思考一点,
慢慢你会发现,
你的进步越来越大。
s = '''每天坚持一点,
每天努力一点,
每天多思考一点,
慢慢你会发现,
你的进步越来越大。'''
with open(r'a1.txt', 'w', encoding='utf-8')as f:
f.write(s)
e, 将原文件内容全部读取出来,并在‘我说的都是真的。哈哈’这一行的前面加一行,‘你们就信吧~’然后将更改之后的新内容,写入到一个新文件:a1.txt。

with open('a1.txt', mode='r', encoding='utf-8')as f, \
        open('a2.txt', mode='w', encoding='utf-8')as f2:
    n = 0
    while 1:
        n += 1
        if f.readline() == '我说的都是真的。哈哈':
            break
    f.seek(0)
    m = 0
    while m < n - 1:
        m += 1
        f2.write(f.readline())
    f2.write('你们就信吧~\n')
    f2.write(f.readline())

2,有如下文件,t1.txt, 里面的内容为:

葫芦娃,葫芦娃,
一根藤上七个瓜
风吹雨打,都不怕,
啦啦啦啦。
我可以算命,而且算的特别准:
上面的内容你肯定是心里默唱出来的,对不对?哈哈

分别完成下面的功能:
a, 以r + 的模式打开原文件,判断原文件是否可读,是否可写。
with open('t1.txt', 'r+', encoding='utf-8')as f:
if f.readable():
print('这文件可读')
if f.writable():
print('这文件可写')
b, 以r的模式打开原文件,利用for循环遍历文件句柄。
with open('t1.txt', 'r', encoding='utf-8')as f:
for n in f:
print(n.strip())
c, 以r的模式打开原文件,以readlines()方法读取出来,并循环遍历readlines(), 并分析b, 与c有什么区别?深入理解文件句柄与readlines()结果的区别。
with open('t1.txt', 'r', encoding='utf-8')as f:
lst = f.readlines()
for n in lst:
print(n.strip())
d, 以r模式读取‘葫芦娃,’前四个字符。
with open('t1.txt', mode='r', encoding='utf-8')as f:
print(f.read(4))
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:
k = 0
for n in f:
k += 1
if '风吹雨打' in n:
break
f.seek(0)
while k - 1:
k -= 1
f.readline()
for n in f:
print(n)
g, 以a + 模式打开文件,先追加一行:‘老男孩教育’然后在从最开始将原内容全部读取出来。
with open('t1.txt', mode='a+', encoding='utf-8')as f:
f.write('\n老男孩教育')
f.seek(0)
print(f.read())
h, 截取原文件,截取内容:‘葫芦娃’
with open('t1.txt', mode='r+', encoding='utf-8')as f:
f.truncate(9)

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}......]并计算出总价钱。

import copy
lst = []
dit = {}
with open('a.txt', mode='r', encoding='utf-8')as f:
    for n in f.readlines():
        dit = {}
        dit['name'] = n.strip().split(' ')[0]
        dit['price'] = n.strip().split(' ')[1]
        dit['amount'] = n.strip().split(' ')[2]
        lst.append(dit)
    print(lst)

4,有如下文件:

alex是老男孩python发起人,创建人。
alex其实是人妖。
谁说alex是sb?
你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。

将文件中所有的alex都替换成大写的SB(文件的改的操作)。

import os

lst = []
with open(r'alex.txt', mode='r', encoding='utf-8')as f:
    for n in f:
        lst.append(n.replace('sb', 'SB'))
with open('alex2.txt', 'w', encoding='utf-8')as f:
    for n in lst:
        f.write(n)
os.remove('alex.txt')
os.rename('alex2.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}......]
并计算出总价钱。

dit = {}
lst = []
with open('a1.txt', 'r', encoding='utf-8')as f:
    for n in f:
        dit = {}
        dit[n.strip().split(' ')[0].split(':')[0]] = n.strip().split(' ')[0].split(':')[1]
        dit[n.strip().split(' ')[1].split(':')[0]] = n.strip().split(' ')[1].split(':')[1]
        dit[n.strip().split(' ')[2].split(':')[0]] = n.strip().split(' ')[2].split(':')[1]
        dit[n.strip().split(' ')[3].split(':')[0]] = n.strip().split(' ')[3].split(':')[1]
        lst.append(dit)
print(lst)

6,文件a1.txt内容(升级题)

序号 部门 人数 平均年龄 备注
1 python 30 26 单身狗
2 Linux 26 30 没对象
3 运营部 20 24 女生多
.......

通过代码,将其构建成这种数据类型:
[{'序号': '1', '部门': Python, '人数': 30, '平均年龄': 26, '备注': '单身狗'},
......]

lst = []
with open(r'a1.txt', 'r', encoding='utf-8')as f:
   for n in f:
       dict = {}
       dict['1'] = n.split(' ')[0]
       dict['部门'] = n.split(' ')[1]
       dict['人数'] = n.split(' ')[2]
       dict['平均数'] = n.split(' ')[3]
       dict['备注'] = n.split(' ')[4]
       lst.append(dict)
print(lst)

争取今晚肝完周末作业吧!!!