文件处理流程

1.打开文件,得到文件句柄并赋值给一个变量

2.通过句柄对文件进行操作

3.关闭文件

f=open('test.txt',encoding='gbk')
data = f.read()
print(data)
f.close()

 

 

 

w+每次打开文件,都会清空之前的内容,若文件不存在,则会自动创建

r+会在之前的基础上追加内容,但是不会创建文件

所以两个可以一起用,用之前判断一下文件是否存在,如下

 

 

读取文件:

#r代表只读 w代表只写 a代表只追加
#默认打开文件是只读模式
f=open('test.txt','r',encoding='gbk')
data = f.read()
print(data)
f.close()
print(f.readable())#返回bool文件是否可读
print('第一行',f.readline(),end='')#读每一行
print('第二行',f.readline())
print('第三行',f.readline())
print(f.readlines())


写文件:

文件内容只能是字符串模式

f=open('zzz','w',encoding='utf-8')
f.write('111111111111\n')
f.write('2222222222222222\n')
f.writelines(['333\n','444\n'])
f.close()


追加:

f=open('zzz','a',encoding='utf-8')
f.write('写到文件最后')


f.close()

写文件都是从光标处开始写,若不读文件,则光标在第一行顶头
数据本质上都是覆盖,没有改写

 

#修改文件第一行
f=open('a.txt','r')
data=f.readlines()
print(data)
f.close()

d=open('a.txt','w')
d.write(data[0])
d.close()

 

with关键字:

with open('a.txt','w') as a:
    a.write('1111\n2222')

相当于打开文件对文件进行操作后关闭文件

with open('a.txt','r') as a,\
    open('xxx','w') as b:
    data=a.read()
    b.write(data)

 

以字节方式操作文件

Windows平台中,\r\n为回车

Linux平台中,\n为回车

#'字符串'---------encode编码--------->>>bytes
#bytes---------decode解码--------->>>'字符串'

二进制方式读:

# f=open('a.txt','rb',encoding='utf-8')#b的方式不能执行编码
f=open('a.txt','rb')
data=f.read()
print(data)
#'字符串'---------encode--------->>>bytes
#bytes---------decode--------->>>'字符串'
print(data.decode())
f.close()

 

二进制方式写:

f=open('zzz','wb')
#f.write('1111\n')#报错
x='1111\n'
y=bytes(x,encoding='utf-8')
f.write(y)
z=x.encode('utf-8')
f.write(z)
f.close()

open()默认参数:

 Character Meaning
    --------- ---------------------------------------------------------------
    'r'       open for reading (default)
    'w'       open for writing, truncating the file first
    'x'       create a new file and open it for writing
    'a'       open for writing, appending to the end of the file if it exists
    'b'       binary mode
    't'       text mode (default)
    '+'       open a disk file for updating (reading and writing)
    'U'       universal newline mode (deprecated)

 


 文件操作的其他方法:

f.closed返回bool值表示文件是否关闭

 f.encoding查看使用open打开文件时的编码

f.flush()刷新,将内存中数据保存到硬盘

注意:read(3)代表读取3个字符,其余的文件内光标移动都是以字节为单位如:seek,tell,truncate

f.tell()返回光标当前位置

f=open('a.txt','r',encoding='utf-8',newline='')#newline=''读取文件中真正的换行符号

f.seek()控制光标的移动,seek(a,b)第一个参数表示相对上一次移动的字节,第二个参数为0表示从文件开头开始计算,为1从上一次光标停的位置计算,为2从末尾开始计算,且此时第一个参数需加-号,第二个参数是1,2时需指定文件以b的方式打开

#读取文件最后一行,下面的第一种方法会加大内存,拖慢速度,相当于把整个文件都读取并缓存到内存中
f=open('a.txt','r+',encoding='utf-8')
data=f.readlines()
print(data[-1])

>>>2019/3/27   她做了sb一件事情


####################
f=open('a.txt','rb')
for i in f:
    offs=-10
    while True:
        f.seek(offs,2)
        data=f.readlines()
        if len(data)>1:
            print('文件的最后一行是:%s'%data[-1].decode('utf-8'))
            break
        offs*=2

>>>文件的最后一行是:2019/3/27   她做了sb一件事情

 


f.truncate(10)从开头开始算,将文件只保留从0-10个字节的内容,文件必须以写的方式打开,w和w+除外

 

#循环文件的推荐方式:
f=open('')
for i in f:
    ......

 

 
posted on 2019-03-21 15:45  Manuel  阅读(223)  评论(0编辑  收藏  举报