Python学习笔记-Day8

内容大纲:

一、文件操作初识

二、文件的读、写、追加

三、文件的改

四、文件读取的五种方法

五、文件的操作方法

六、主动关闭句柄

 

 

一、文件操作初识

打开一个文件需要知道的内容有:

文件路径:c:\文件.txt(绝对路径和相对路径)

编码方式:utf-8、gbk、GB2312…

操作方式:只读、只写、写读、读写、追加等

f = open('文件路径', '编码方式', '操作方式')

例如:这是一个文件读取的代码

 

f = open('c:\python\文件.txt',encoding='utf-8',mode='r')
content = f.read()
print(content)
f.close()

 

其中:

f:文件句柄,可以是f_obj、f_handler、f_h、fh

open:python的内置函数(内部调用的是windows的系统命令)

打开文件时的报错原因:

1、UnicodeDecodeError:编码不一致,存储文件编码与打开文件时的编码方式不同

2、FileNotFoundError:路径问题(文件名错误)

解决方式:

①在路径前加上 r:r'c:\python\文件.txt'

②将每个\变成 \\

绝对路径:根目录开始找

相对路径:当前文件夹开始找

 

二、文件的读、写、追加

1、、文件的读:

r    *****

rb   ***

r+  *****

r+b

(1) r:对于r模式,mode可以不写

f=open('c:\python\文件',encoding='utf-8',mode='r')
content=f.read()
print(content)
f.close()

(2) rb:文件以字节(8bit,16进制)进行读取。不需要编码方式。主要用于非文字类的文件读取。

f=open('c:\python\图片.jpg',mode='rb')
print(f.read())
f.close
输出结果是:b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x0…….

(3) r+:读写,先读后追加。

①先读后写:在文件后追加上写的内容

path='c:\python\文件.txt'
f=open(path,encoding='utf-8',mode='r+')
content=f.read()    #先读
print(content)
f.write('天安门')   #后追加
f.close()

②不读直接写:写的内容会从文件开始覆盖原文件(按照每个不同字符的字节的大小)

path='c:\python\文件.txt'
f=open(path,encoding='utf-8',mode='r+')
f.write('天安门')
f.close()

(4)r+b:文件以字节形式进行先读后以字节形式写,没有encoding。

path='c:\python\文件.txt'
f=open(path,mode='r+b')
print(f.read())
f.write(b'\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8')

 

2、文件的写

w

wb

w+

w+b

(1)w:没有文件,创建文件也要写;有文件,文件先清空,后写入

f=open('文件',encoding='utf-8',mode='w')  #在相对路径下先创建这个文件
f.write('你好,我是某某某')
f.close()

(2)w+:写读,先写后读,但是此时光标已经移至最后,读出的内容可能只有一个换行符。但是可以通过改变光标位置进行读操作

f=open('文件',encoding='utf-8',mode='w+')
f.write('123456')
print(f.read())  #读不出来
f=open('文件',encoding='utf-8',mode='w+')
f.write('123456')
f.seek(2)
print(f.read())    #改变了光标的位置,可以读出东西来

(3)wb:以字节形式写入

f=open('文件',mode='wb')
f.write(b'\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8')

(4)wb+:以字节方式写入加读取

 

3、文件的追加

a

ab

a+

a+b

(1)a:没有文件,创建文件也要写;有文件,在文件后面追加

f=open('文件追加',encoding='utf-8',mode='a')
f.seek(1)   #不管光标在哪里,都是在最后追加
f.write('123')

 

三、文件的改

文件的改(需要用到python的内置函数 os)

 

1、以读的模式打开原文件,产生一个文件句柄f1;

2、以写的模式创建一个新的文件,产生一个文件句柄f2;

3、读取原文件的内容,进行修改,并将修改后的写入到新文件中;

4、将原文件删除;

5、将新文件重新命名为原文件

方法一、

import os
with open('文件',encoding='utf-8',mode='r')asf1,\
    open('文件的改',encoding='utf-8',mode='w')asf2:
    old_content=f1.read()
    new_content=old_content.replace('天安门','beiji')
    f2.write(new_content)
os.remove('文件')
os.rename('文件的改','文件')

方法二、

import os
with open('文件1',encoding='utf-8',mode='r')asf1,\
    open('文件的改1',encoding='utf-8',mode='w')asf2:
    forlineinf1:
    new_line=line.replace('qwer','asv')
    f2.write(new_line)
os.remove('文件1')
os.rename('文件的改1','文件1')

 

 四、文件读取的五种方式

1、read():全部读取,对于较大的文件,内存会负担不起

2、read(n):r模式下按照字符读取;rb模式下按照字符的bytes模式读取

3、readline():按行读取,但是中间会有个换行符,这是因为每行文件末尾默认都有一个换行符

path='c:\python\文件.txt'
f=open(path,encoding='utf-8',mode='r')
print(f.readline())
print(f.readline())
print(f.readline())
f.close()

 

4、readlines():按行读取,返回一个列表,列表中的每个元素就是每一行的字符串

path='c:\python\文件.txt'
f=open(path,encoding='utf-8',mode='r')
print(f.readlines())
f.close()

输出结果是:['123456\n', '你好吗,中国\n', '中国,你好码\n', '深圳\n', '广州\n', '中国\n', '北京\n']

 

5、for循环:逐行输出

path='c:\python\文件.txt'
f=open(path,encoding='utf-8',mode='r')
for line in f:
print(line.strip())
f.close()
输出结果是:
123456
你好吗,中国
中国,你好码
深圳
广州
中国
北京

 

五、文件的常用操作方法

read():文件的读操作

write():文件的写操作

close():文件关闭

seek():移动光标位置,在进行w+或者a+的时候可以通过移动光标的位置进行读取,光标是按照字节来移动

seek(0,2):将光标移到最后一位

tell():返回光标的位置

readable():判断是否可读

writable():判断是否可写

truncate():在writable模式下进行截取,r+、a+,不能在w模式下使用,对原文件进行截取。按照字符截取

f=open('文件',mode='r+')
print(f.truncate(6))#截取文件后6个字符
f.close()

 

 

六、主动关闭文件句柄的方法

有的时候会忘记在末尾加上f.close()

所以有主动关闭文件句柄的方法,这种方法会在一定时间内关闭,有利有弊

 

1、主动关闭文件句柄

with open('文件',encoding='utf-8',mode='r') as f1:
print(f1.read())

 

2、可以同时开启多个文件句柄

with open('文件',encoding='utf-8',mode='r') as f1,\
open('文件1',encoding='utf-8',mode='w') as f2:
print(f1.read())
f2.write('qwert')

 

 

 

 

posted @ 2018-08-13 22:03  whuitian  阅读(261)  评论(0编辑  收藏  举报