文件
打开文件
open()函数
#获取文件句柄 f=open("D:\haha.txt") #读取文件数据 data=f.read() #打印读取的内容 print(data)
f 又叫文件句柄,它包含文件的文件名、文件的字符集、文件的大小、文件在硬盘上的起始位置若想再次读文件,实际是不可以的。因为在文件中 ,维护一个类似文件指针的一个东西,这个文件指针类似于我们平时操作文件时的光标的东西,所以当第1次读文件时,文件指针已经指向最后一个位置,所以第2次再去读取的时候,是从最后一个位置开始读取的,所以读取的为空。那怎么再重新读取数据?把光标移动到开始位即可。
文件的打开模式
只写
(1)w :覆盖原有内容
(2)a: 在末尾追加写入,不覆盖原有内容
只读
read()读全部
f=open("D:\haha.txt","r",encoding="utf-8") data=f.read() print(data) >>> aaaa ppppp bbbb cccc dddd eeee ffff
readline() 只读一行
f=open("D:\haha.txt","r",encoding="utf-8") data=f.readline() print(data) >>> aaaa ppppp
readlines()读取全部,把文件中的每一行作为一个元素形成一个列表
f=open("D:\haha.txt","r",encoding="utf-8") data=f.readlines() print(data) >>> [‘aaaa ppppp\n‘, ‘bbbb\n‘, ‘cccc\n‘, ‘dddd\n‘, ‘eeee\n‘, ‘ffff\n‘]
应用:
1、读前几行
f=open("D:\haha.txt","r",encoding="utf-8") for i in range(5): data = f.readline() print(data)>>>
aaaa ppppp
bbbb
cccc
2、第3行内容不显示,用---***---代替
for j,k in enumerate(f.readlines()): if j==2: print("---***---") continue print(k) >>>输出 aaaa ppppp bbbb ---***--- dddd eeee ffff
以上f.readlines()已经先把文件读到内存,然后再循环。文件小无所谓,但是文件大时,就得等很久,而且会容易把内存撑爆。
改变该方式的方法:读一行,存一行,打印一行。
虽然达到读取文件的的目的,但是都是将内容读取到内存中,若文件小则无所谓,但是对于大文件,比如200G,则内存会被,所以不适合。读一行,存一行。打印一行,只保存一行内容到内存中。
迭代取文件内容:
for i in f: print(i) >>> aaaa ppppp bbbb cccc dddd eeee ffff
文件修改
文件修改思路2种,如下:
第一个 vim: 把文件内容先全都加载到内存里,修改的时候是在内存里修改的。这种情况不需要新建文件。但是文件如2g一样大,就会有问题
第二个 打开文件修改完了,加载到新文件里。
思路:边读边写,如果该行不是需要修改的,就直接写到新文件里,如果该行是需要修改的,就先修改,修改完了再写到新文件 里
# -*- coding:utf-8 -*- f=open("yes.txt",‘r‘) f_new=open("yes_new.txt","w") for line in f: if "太阳" in line: line=line.replace("太阳","sun") f_new.write(line)>>>>>>>>>>
我爱北京天安门
天安门上sun升
毛主席
时间: 2024-10-17 12:37:25