1,文件编码
python默认编码,python2默认为ascii,python3默认为utf-8所以说,python3默认支持中文。
>>> import sys
>>> sys.getdefaultencoding() #显示python默认编码
'utf-8'2,
2,文件操作通过指针的移动在读取文件,文件打开,指针指向文件开头,文件读完,指针指向文件末尾,指针不会自动回到文件开头,所以说,文件只能读一遍,如果想想再一次从头读取文件,就需要手动将指针指向文件开头(1)只读
>>> f = open('1.txt','r')
>>> data = f.read()
>>> data2 = f.read() #疑问:data2有数据吗?
>>> f.close()
>>> print (data)
1
2
3
4
5
6
7
8
9
人民的民义
>>> print (data2) #data2为空
>>>
(2)只写,如果文件已存在,就覆盖
>>> f = open('1.txt','w')
>>> f.write('洞房花烛夜\n')
6
>>> f.write('进班题名时\n')
6
>>> f.close()
>>>
(3)追加,只能在文件末尾追加,不能读
>>>
>>> f = open('1.txt','a')
>>> f.write('洞房花烛夜\n')
6
>>> f.write('进班题名时\n')
6
>>> f.close()
>>>
(4)文件的方法f.readline():每次读取文件的一行内容
r+ 读写,可读可追加
w+ 写读,先创建一个文件,在写入(没太多用)
a+ 追加读
rb 二进制格式读取文件,没有encoding参数,使用场景:pyython3中网络传输只能用二进制,视频文件都是二进制的
wb 二进制格式写,f.write('hello binary\n'.encode()) 写时需要str--->bytes,装换
比如:vim 是将文件先全部加载到内存,再进行修改,所以vim读取大文件时要等很久,修改完后再写入硬盘 这种情况下不需要创建新的文件,所以vim适合读小文件
(5) with:为了避免打开文件爱你后忘记关闭,可以通过管理上下文,当with代码臧星完后,内部自动关闭文件释放资源
#打开一个文件
>>> with open('1.txt','r') as f1:
... for line in f1:
... print (line)
...
源于纯净
归于健康
#同时打开多个文件
>>> with open('1.txt','r') as f1,\
... open('2.txt','r') as f2:
... for line in f1:
... print (line)
... for line in f2:
... print (line)
...
源于纯净
归于健康
a
b
c
d
e
f
g
>>>
(6)实例:不打印文件第三行i:这个方法比较low,f.readlines():把文件的每一行作为一个元素,全部存入一个列表,这个readlines方法一次性把文件全部读入到内存中,只适合小文件
f = open('1.txt','r')
for index,line in enumerate(f.readlines()):
if index == 2:
print ('--------我是分割线---------')
continue
print (index,line.strip())
f.close()
运行结果:
root@pythonserver:/python_shell# python3 code_fileoperator.py
0 洞房花烛夜
1 进班题名时
--------我是分割线---------
3 进班题名时
ii:推荐使用这个方法,占用内存少,高效
f = open('1.txt','r')
Count = 1
for line in f: #此时,f是一个迭代器,文件一行一行的读入内存,内存中同时载入文件中的一
#行,读取下一行到内存是,覆盖上一行
if Count ==3:
print ('----------我是分割线-----------')
Count +=1
continue
print (line.strip())
Count +=1
f.close()
执行结果:
oot@pythonserver:/python_shell# python3 code_fileoperator.py
洞房花烛夜
进班题名时
----------我是分割线-----------
进班题名时