Python Day 8 基础数据类型(文件的操作,文件的常用方法,文件的改)

Python Day 8

文件操作

必要的条件

1:操作的文件  file

2:编码  encoding=''

3:模式  mode=''

文件操作的流程:

  1.打开文件,产生文件句柄。
  2.对文件句柄进行相应的操作。
  3.关闭文件。

#凡是带b不用encoding (bytes默认utf-8编码格式)

#只有是r模式 mode='r'可以省略不写

基本操作方法:

f = open('文件名',encoding='编码',mode='r')  #变量:f1_obj,f1_file,file,file_handle... 文件句柄。open Python的内置函数,但是底层调用的windows系统的open功能,open功能就是操作文件用的。windows系统默认的编码方式gbk,linux,macos:utf-8.
print(f.read())   #不能缩进

f.close()

简化操作方法:

with open('aaa.txt',encoding='utf-8',mode='r') as f1:  #不用主动关闭 f1.close()
    print(f.read())
    pass
    f1.close()   #嵌套操作打开多个文件可以主动关闭
    with open('bbb.txt',encoding='utf-8',mode='w') as f2:
        f2.write('hello')
with open('log1', encoding='utf-8') as f1,
    open('log2',encoding='utf-8', mode='w') as f2:
    print(f1.read())
    f2.write('666')

文件操作模式:

读  r   

r模式:read(n) n 是按照字符读取。
rb模式:read(n) n 是按照字节读取。

  1、r 只读 (5种读取方法)


1、for循环 最好的  (文件句柄是一个可迭代对象,使用for循环读取时每次只占用一次内存,适用于读取大文件)

2、f.read()    (一次性全部读出来,加载到内存当中。缺点受限于内存,大文件读取会受影响)

3、f.read(n)    (按字符读取。缺点不方便)

4、f.readline()    (按行读取,一次读取一行。缺点多行时,需要重复很多次。)

5、f.readlines()    (一次读取全部,形成列表,一行是一个元素。缺点受限于内存,大文件读取受影响)

  2、rb 只读b模式(读取非文字类文件(图片,视频,音频))

  3、r+  读写,先读后写

  4、r+b 读写b模式,b模式的先读后写

=============================================================

写  w    (没有文件,创建文件写内容。如果有文件,清空原文件,写入新内容。)

  1、w 只写

  2、wb 只写b模式

  3、w+ 写读,先写后读

  4、w+b 写读b模式,b模式的先写后读

=============================================================

x, 只写模式【不可读;不存在则创建,存在则报错】

=============================================================

追加  a   (没有文件,创建文件写内容。如果有文件,在文件原内容最后,追加写入新内容。)

  1、a 只追加

  2、ab 追加b模式

  3、a+  追加可读

  4、a+b 追加可读b模式

 补充: gbk utf-8

对于字母,数字,特殊字符的编码都是引用ascii码,所以可以直接转化。
s1 = '123abc*'
b1 = s1.encode('utf-8')
s2 = b1.decode('gbk')
print(s2)

文件操作常用方法

read()  :读取

1 f1 = open('aaa.txt',encoding='utf-8')
2 print(f1.read())
3 f1.close()
4 
5 with open('aaa.txt',encoding='utf-8') as f2:
6     print(f2.read())
read()

write()  :写入

1 f1 = open('aaa.txt',encoding='utf-8',mode='w')
2 f1.write('老男孩')
3 f1.close()
4 
5 with open('aaa.txt',encoding='utf-8',mode='w') as f2:
6     f2.write('小男孩')
write()

read(n)  :一次读取多个字符

1 f1 = open('aaa.txt',encoding='utf-8',mode='r')
2 print(f1.read(3))
3 f1.close()
4 
5 with open('aaa.txt',encoding='utf-8',mode='r') as f2:
6     print(f2.read(3))
read(n)

readline()  :一次读一行,多行需要读取多次

1 f1 = open('aaa.txt',encoding='utf-8',mode='r')
2 print(f1.readline())
3 print(f1.readline())
4 f1.close()
5 
6 with open('aaa.txt',encoding='utf-8',mode='r') as f2:
7     print(f2.readline())
8     print(f2.readline())
readline()

readlines()  :一次性读取全部,生成列表,每一行是列表的一个元素。

f1 = open('aaa.txt',encoding='utf-8',mode='r')
print(f1.readlines())
f1.close()

with open('aaa.txt',encoding='utf-8',mode='r') as f2:
    print(f2.readlines())

================
['小男孩
', 'ok
', '123
', 'aaa']
['小男孩
', 'ok
', '123
', 'aaa']
readlines()

seek(0)  :移动光标,按照字节去调整光标   seek(0,2) 光标调整到最后

tell()  :告诉光标位置

1 f1 = open('aaa.txt',encoding='utf-8',mode='a')
2 print(f1.tell())   #0 初始光标位置,追加从末尾开始
3 print(f1.write(''))  #4 返回写入字符个数
4 print(f1.tell())    #4  当前光标位置
5 f1.seek(0)   #移动光标 到0字节处
6 print(f1.tell())   #0
7 f1.close()
seek(),tell()

readlable()  :判读是否可读

1 f1 = open('aaa.txt',encoding='utf-8',mode='a')
2 print(f1.readable())
3 f1.close()
4 
5 返回bool
readable

writable()   :判断是否可写

1 f1 = open('aaa.txt',encoding='utf-8',mode='w')
2 print(f1.writable())
3 f1.close()
writable()

truncate(3)  :对原文件进行截取内容,以字节形式截取保留,只能再a模式下使用。

f1 = open('aaa.txt',encoding='utf-8',mode='a')
f1.truncate(3)
f1.close()


aaa.txt 

aaa123bbb

===============
aaa
View Code

文件的改

改的流程

1,打开原文件 old_file,将原内容读取到内存。
2,创建一个新文件new_file。
3,将原内容通过你修改,形成新内容,写入到新文件。
4,将原文件删除。
5,将新文件重命名成原文件。

方法一: read读取,一次性修改。

import os
with open('aaa.txt',encoding='utf-8') as f1 ,   #打开原文件
        open('.swap.aaa.txt',encoding='utf-8',mode='w') as f2:  #创建新文件
            a = f1.read().replace('aaa','bbb')  #一次性读取,修改原文件内容
            f2.write(a)  #将修改后的全部内容,写入新文件。
os.remove('aaa.txt')   #删除原文件
os.rename('.swap.aaa.txt','aaa.txt')  #将新文件重命名为原文件名。

方法二: for循环读取按行修改。

import os
with open('aaa.txt',encoding='utf-8') as f1,    #打开原文件
    open('.aaa.txt',encoding='utf-8',mode='w') as f2:  #打开一个新文件
    for line in f1:         #按行读取原文件
        line = line.replace('aaa','bbb')    #替换每一行的文件内容
        f2.write(line)             #每行写入一次
os.remove('aaa.txt')      #文件写入完成后删除原文件
os.rename('.aaa.txt','aaa.txt')         #新文件重命名为原文件名
原文地址:https://www.cnblogs.com/eailoo/p/9008770.html