python 基础 day03—文件操作

对文件操作流程:

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

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

3.关闭文件

创建一个名为lyrics的txt文件在目录下

f = open('lyrics','r',encoding="utf-8")  #打开文件,f为文件句柄,r为读模式
first_line = f.readline()    
print("first line:",first_line)             #读文件的第一行,文件太大时建议循坏方式读取内容
print('我是分割线'.center(50,'-'))      #创建一条分割线
data = f.read()                              #读取完整的文件,文件太大时不要使用
print(data)                                    #打印文件

f.close()                                        #关闭文件

  

 注意文件是utf-8保存的,打开文件时open函数通过操作系统打开文件,而我所在的win7操作系统默认使用gbk编码,因为不能直接打开,需要加上encoding="utf-8"

打开文件的模式有:

  • r,只读模式(默认)。
  • w,只写模式。【不可读;不存在则创建;存在则覆盖原来的内容;】
  • a,追加模式。【可读;   不存在则创建;存在则只追加内容;等同append】

"+" 表示可以同时读写某个文件

  • r+,可读写文件。【可读:从0位读取;可写:末端添加】
  • w+,写读(没什么实际用处)
  • a+,同a

"U"表示在读取时,可以将 自动转换成 (与 r 或 r+ 模式同使用)

  • rU
  • r+U

"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

  • rb
  • wb
  • ab

循环读取文件:

readline 读取整行文字

readlines 读取所有行

读取打印n行数据

for i in range(n):
    print(f.readline)

 

读取打印整份文件:

只适合读小内存文件

for line in f.readlines():   #每循环一次(打印一行),line等于一个元素
    print(line.strip())             #打印每行,strip()函数:去掉换行符和空格

读取到第九行插入“分割线”:

for index,line in enumerate(f.readlines()):
    if index == 9:
        print('我是分割线'.center(50,'-'))
        continue
    print(line.strip())  

  

一行行读取文件,内存里面只保存一行文字

可适用大文件,效率更高!推荐!

for line in f:   #f已经变成了一个迭代器
    print(line)

 读取到第九行插入“分割线”: 

#自己添加计数器
count = 0
for line in f:
    if count == 9:
        print('我是分割线'.center(50, '-'))
    print(line)
    count += 1

  

文件修改: 

两种方式

1.把文件全部加载到内存对象,像VIM一样,修改完后写到原文件(不可取)

2.打开一个文件,修改完写入一个新文件里面

如下:

f= open("lyrics","r",encoding="utf-8")
f_new= open("new-lyrics.bak",'w',encoding="utf-8")

for line in f:
    if"原文内容哈哈哈" in line:
        line = line.replace("原文内容哈哈哈","更改内容嘿嘿嘿")
    f_new.write(line)

f.close()
f_new.close()

  

with语句

 为了避免忘记打开文件,可以用with

with open("lyrics","r", encoding="utf-8") as f:
    for line in f:
        print(line)
#不用执行关闭文件操作

  

当with 代码块执行完毕后,内部会自动关闭并释放文件资源

原文地址:https://www.cnblogs.com/cherrycui/p/10164674.html