今天把饭倒进黄焖鸡里,同桌上楼就拉肚子
今日主要内容
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)