一、文件操作步骤
创建文件对象---->调用文件方法---->关闭文件
1、创建文件对象
方法1:
f = open('文件名','方法',encoding='编码')
方法2:
with open('文件名','方法',encoding='编码') as f:
...
...
2、调用文件方法
(1)、r(只读模式)
先创建个文件'常伟',内容如下:
hello
创建文件对象“f”,内容为“打开文件‘常伟’,对其进行‘只读’操作”,最后关闭对象
方法1:
f = open('常伟','r',encoding='utf8')
...
...
f.close()
方法2:
with open('常伟','r',encoding='utf8') as f:
...
...
注意:第一种类似赋值似的方式,当对文件操作完成后一定要关闭对象,所以后面的示例中都使用with方式创建对象,实际工作中建议以with方式为主。
f.read()
默认读出所有内容,可以限制具体读出多少位(如果文件内容有汉字,则一个汉字在该操作中占1位(3个指针位)))
示例:
创建文件对象“f”,内容为“打开文件‘常伟’,对其进行‘只读’操作,先读取全部内容,再读取5个位数”,最后关闭对象(我是不会再文章中写出输出的,因为我想你试)
with open('常伟', 'r', encoding = 'utf8') as f:
a = f.read()
print(a)
with open('常伟', 'r', encoding = 'utf8') as f:
b = f.read(3)
print(b)
f.readline()
读取一行内容
with open('常伟', 'r', encoding = 'utf8') as f:
a = f.readline()
print(a)
f.readlines()
读取所有内容到列表,一换行符为分割点(如果文件较大这种方式容易占满内存)
调整文件'常伟'的内容为:
帅的一逼cool!
人帅技术好
幽默不逗逼
示例:
with open('常伟', 'r', encoding = 'utf8') as f:
a = f.readlines()
print(a)
注意:
在python中有个‘指针’的概念,默认我们对文件做只读操作时指针初始位置在0位,当我执行完f.read()读取全部内容后,指针会指向对象'f'的最后位置,如果这时我们继续对对象'f'操作,那么后续的操作都是从当前指针的位置开始进行的。
这就是为什么f.read()示例中要创建两次文件对象,而不是在一个文件对象操作两次,那么有什么简便方法吗?当然有,那就是更改光标位置。
f.tell()
显示当前'指针位置'
with open('常伟', 'r', encoding = 'utf8') as f:
print(f.tell())
a = f.read()
print(f.tell())
print(a)
f.seek()
调整‘指针’到某个位置
with open('常伟', 'r', encoding = 'utf8') as f:
print(f.tell())
a = f.read()
print(a)
f.seek(0)
b = f.read(3)
print(b)
(2)、w(只写模式)
当文件以只写方式调用,那么在会先清空该文件在写入
创建文件对象“f”,内容为“打开文件‘常伟’,对其进行‘只写’操作,”,最后关闭对象(如果文件不存在,则创建该文件;如果存在则清空该文件的内容)
with open('常伟', 'w', encoding = 'utf8') as f:
...
f.write()
写入内容
with open('常伟', 'w', encoding = 'utf8') as f:
f.write('大帅逼')
(3)、a(追加写)
创建文件对象'f',内容为"打开文件‘常伟’,对其进行‘追加写入’操作",然后关闭该文件
with open('常伟', 'a', encoding = 'utf8') as f:
...
向上文创建的文件'常伟'中追加一条内容"而且技术屌的一逼!"
with open('常伟', 'a', encoding = 'utf8') as f:
f.write('而且技术屌的一逼!')
flush()
将数据从缓存转移到磁盘
进度条功能实现
方法1:
import sys,time
for i in range(10):
sys.stdout.write('*')
sys.stdout.flush()
time.sleep(0.2)
方法2:
import sys,time
for i in range(10):
print('*',flush=True,end='')
time.sleep(0.1)
truncate()
截断指定位置后的内容(注意汉字的一个编码为3,如果是汉字就要是3的整数倍不然会报错)
例如我有个文件"常伟",内容为“我是个大帅哥”,现在需要截取前两个字
with open('常伟','a',encoding='utf8') as f:
f.truncate(6)
(4)、r+(读写模式,指针默认在0位置,最后位置开始写)
例如,我有个文件“常伟”,内容如下:
中国屌屌!!
台湾独杀杀!
钓鱼岛是中国的!
with open('常伟','r+',encoding='utf8') as f:
a=f.readline()
print(a)
f.write("南海也是我们的!")
现在你猜猜文件"常伟"里面的内容。
(5)、w+(先清空,在读)
(6)、a+(光标默认在最后位置)
3、关闭文件
(1)、第一种创建方式
f.close()
(2)、第二种创建方式(缩进内容结束自动关闭)
4、其它知识
1、将某数据类型换为字符串
a = {
'bj':{
'tiananmen': 'zijincheng',
'zhongnanhai': 'guojialingdaoren'
},
'shanghai':{
'jichang':'tt',
'TI': '2'
}
}
a_to_str = str(a)
print(type(a_to_str))
print(a_to_str)
2、将字符串转回原来的数据类型
a = {
'bj':{
'tiananmen': 'zijincheng',
'zhongnanhai': 'guojialingdaoren'
},
'shanghai':{
'jichang':'tt',
'TI': '2'
}
}
a_to_str = str(a)
print(type(a_to_str))
print(a_to_str)
b = eval(a_to_str)
print(type(b))
print(b)