Day07 文件操作

1)昨日内容回顾

2)作业讲解

3)文件操作

    open()内置函数  实际上是调用操作系统对文件操作的功能

    windows:默认的编码方式gbk

    linux: 默认编码方式utf-8

    ios : 默认的编码方式是utf-8

    接下来你对文件的任何操作,都需要借助文件句柄

f = open('1.txt',encoding='utf-8'mode=’r')

f.read()

f.close()

 

‘’‘

1.打开文件产生文件句柄

2.对文件句柄进行操作

3.关闭文件句柄

’‘’

常见错误:

1.路径错误。 \ 与后面的那个字符有了特殊意义

解决方式:

    r'd:\1.txt'   在路劲前面加 r

    'd:\\1.txt'   第一个\对第二个\进行转义

2.Unicodedecodeerror:编码问题

文件用什么方式存的就用什么方式打开,gbk存的,encoding=’gbk‘

3. encoding 只是声明了次文件需要用什么编码本 编码和解码而已

4.路劲:

绝对路径:从磁盘(根目录)目录开始,直到找到你的文件

相对路径:当前路径(当前文件夹)

 

常见操作:

读(r rb r+r+b

r:只读模式【默认模式,文件必须存在,不存在则抛出异常】

1read() 全读出来 (字符串类型)

2readn

r模式下按照字符读取

rb模式下按照字节去读取

3.按行读取 readlinen#####返回字符串

r模式下按照字符读取

rb模式下按照字节去读取

4.多行读取 readlinesn####返回一个列表,列表每个元素就是文件里的一个行

     只有当n大于你第一行的数时才返回两行的元素,小于的话默认返回那一行的元素

5.for循环(效率较高)

f1 = open('F:\\1.txt','r',encoding='gbk')

for i in f:

    print(line)

 

rb模式:(不需要encoding了)

操作的文件是非文件类的文件:图片,视频,音频等。

read()  read(n)  readlinenreadlinesn)  for 循环

 

r+ 读写模式 (应该先读后写)

1.先读后写(追加)  建议

    读到哪里就在后面增加

2.先写后读(容易出错)

   打开文件时,光标默认在开头,写的时候会以覆盖的形式去写

 

 

 

 

 

若我的文件开头中文,比如吴佳表示六个字节,而alex只有四个字节,所以把中文6个字节分割之后只占了四个字节,还有两个字节无法组成中文,便会报错。。若开头只有一个文字或者英文就不会报错

r+b:以bytes类型操作的读写,写读模式(假设2.txt里面已经保存了图片的bytes数据)

f1 = open('2.txt','r+b')

a = f1.read()

f1.write( b'\xe4\xb8\xad\xe6\x96\x87' )

结果  ,文件最后添加了中文 两个字

 

(一个文件只能被一个文件句柄操作)

#没有文件,创建文件写入

#有文件,清空原文件内容,写入新内容

w:  必须以字符串的内容写入

wb:(不需要encoding了)

写入bytes类型的数据,如图片,视频,音频

# f1 = open('1.png','rb')

# a = f1.read()

# f2 = open('2.png','wb')

# f2.write(a)

 

w+ : 写读模式

f1 = open('2.txt','w+',encoding='utf-8')

f1.write('hahaha')

f1.seek(0)

a = f1.read()

w+b:以bytes类型操作的读写,写读模式

 

追加

#没有文件,创建文件,追加内容

#有文件,在原文件末尾追加新内容

aa+a+b 打开的光标都是放在最后的

a:追加

f1 = open('2.txt','a',encoding='utf-8')

f1.write('hhahaha')

f1.close()

a+ :可读可写(读的时候要将光标调回到前面)

f1 = open('2.txt','a+',encoding='utf-8')

f1.seek(0)

print(f1.read())

f1.write('hhahaha')

f1.close()

a+b:以bytes类型 ,追加,可读可写

 

改:

 #1.读的模式打开原文件,产生文件句柄f1,

    with open('1.txt','r',encoding='utf-8') as f1:

 #2.写的模式打开一个新文件,产生文件句柄f2

     with open('1.txt','2',encoding='utf-8') as f1:

 #3.读取原文件,将原文件内容改写成新内容,写入新文件

   for line in f1:

  content = line.replace('old','new')

  f2.write(content)

 #4.删除原文件

  os.remove('文件名')

 #5.将新文件重命名原文件

  os.rename('old_name','new_name')

 

补充:

另外一种打开文件的模式

 with open’file‘encoding = 'utf-8','r'as f1\

open’file1‘encoding = 'utf-8',w'as f2:

content = fi.read()

    1.自动关闭文件句柄

    2.同一语句可以操作多个文件句柄

    下列情况容易出错,因为有可能f1还没来得及关闭,f2就读取了

# with open('file1',encoding='utf-8') as f1:

#     f1.read()

#     with open('file1', encoding='utf-8',mode='w') as f2:

#         f2.write('5555555')

 

文件的其他操作:

    1. f1.seek(offset[, whence])

offset -- 开始的偏移量,也就是代表需要移动偏移的字节数

whence可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起

    2.fileno() 方法返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作。

    3. f1.flush 刷新缓冲区,强制保存

    4. writeable  readable

if f1.writable():

    f1.write('hhahaha')

    5. f1.tell()返回文件的当前位置,即文件指针当前位置

    6.truncate([size]) 方法用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则从当前位置起截断;截断之后 size 后面的所有字符被删除。

    不能在w模式下使用truncate

 

总结:

   最常用的是 rr+ 其次 rbwwba

   readable()  writeable() seek()  flush() teel()  truncate()

 

posted @ 2018-12-27 23:46  addit  Views(110)  Comments(0)    收藏  举报