Python--文件操作与集合

一、文件操作

对文件的操作分三步:

1、打开文件获取文件的句柄,句柄就理解为这个文件

2、通过文件句柄操作文件

3、关闭文件。

现有以下文件test:

文件基本操作:

1 f = open(r'test',encoding='utf-8') #打开一个文件,默认为只读模式(r可以不写)
2 # print(f.read()) #获取文件里面的所有内容
3 # print('readline:',f.readline()) #读取文件第一行的内容,返回字符串对象
4 # print('readlines',f.readlines()) #获取文件里面所有的数据,每一行的数据放到一个list里面
5 
6 f.close() #关闭文件

1、打开文件的模式

# r,只读模式(默认)。【只能读,不能写;文件不存在会报错】
# w,只写模式。【不可读;不存在则创建;存在则覆盖以前文件的内容】
# a,追加模式。【不可读; 不存在则创建;存在则只追加内容】
# r +,【可读、可写;可追加,如果打开的文件不存在的话,会报错】
# w +,【写读模式,使用w + 的话,已经存在的文件内容会被清空,可以读到已经写的文件内容】
# a +,【追加读写模式,不存在则创建;存在则只追加内容;】
#追加模式下,读和写的时候焦点始终在文件的末尾,除非使用函数seek()强制调整
#只要沾上r,文件不存在肯定会报错 #只要沾上w,文件内容肯定会被清空 # rb 以二进制读模式打开,"b"表示处理二进制文件 # wb 以二进制写模式打开 # ab 以二进制追加模式打开

2、读取文件的三个方法:read()、readline()、readlines()

read()方法:

1)读取整个文件的内容,将所有内容放到一个字符串变量中

2)若文件大于可用内存,不可能使用这种处理

readline()方法:

1)readline()每次读取一行

2)readline()返回的是一个字符串对象,保存当前行的内容

readlines()方法:

1)读取所有文件内容,返回一个list,元素是每行的数据,包括换行符

2)大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆

3、写操作

 常用的写入函数为write(str),writelines(list[str])

1)写入的必须是字符串,writelines()写入字符串列表

2)写入的内容不会自动添加换行符,必须显示写入换行符

#
# f = open(r'test', 'w',encoding='utf-8')
# f.write("test")

#追加
names = ["xx","dd","hh"]
f = open(r'test', 'w',encoding='utf-8')
f.writelines(names) #传一个list,然后把list里面的每一个元素写入到文件中

4、文件其他操作方法

f = open('test', 'r+', encoding='utf-8')  # encoding参数可以指定文件的编码
f.tell()#获取当前文件的指针指向
f.seek(0)#把当前文件指针指向哪
f.fulsh()#写入文件后,立即从内存中把数据写到磁盘中(缓冲区:内容写的数据放在缓冲区,缓冲区满了后再写入到磁盘)
f.truncate()#清空文件内容
f.close()#关闭文件

5、读取文件的高效方法

read()和readlines()方法操作文件,会先把文件所有内容读到内存中。这样的话,内存数据一多会非常卡。高效的操作,就是读一行操作一行,读过的内容就从内存中释放了

f = open('test',encoding='utf-8')

for line in f:  #直接循环文件对象,每次循环的时候就是取每一行数据
    print('line:',line)  #这样的话,line就是每行文件的内容,读完一行的话,就会释放一行的内存

6、自动关文件(使用with)

使用with,它会在使用完这个文件后自动关闭该文件,使用方式如下:

#with 自动关文件
with open('test','r+') as f:
    f.read()
    f.write('uuuuuuu')
#
# #打开多个文件,用逗号隔开
# with open('test','r+') as f,open('test1','w',encoding='utf-8') as fw:
#     f.read()

7、文件修改(两种方式)

第一种:简单粗暴直接

1)先获取到文件里面所有的内容

2)然后修改内容

3)清空原来文件里面的内容

4)重新写入

f = open('test','a+',encoding='utf-8')
f.seek(0)
data = f.read() #文件指针到了最后
new_data = data.replace('','you')
f.seek(0)
f.truncate() #清空文件内容
f.write(new_data)
f.flush()
f.close()

第二种:高效的方法

1)先打开原来的文件,再打开一个空文件
2)循环处理原来文件里面每一行数据,处理完之后,写到新文件里面
3)把原来的文件删除,把新文件的名字改成原来文件的名字

#1、前面的空格
#2、把空行去掉
#3、你替换you
#4、写到新文件里
#5、把原来的文件删除,把新文件的名字改成原来文件的名字
import os
with open('test',encoding='utf-8') as fr,open('.test','w',encoding='utf-8') as fw:
    for line in fr:  #循环文件,读取每一行
        line = line.lstrip()  #去掉每一行的左边的空格
        if line:   #判断此行是否为空,不为空继续进行后面的操作
            new_linel = line.replace('','you')
            fw.write(new_linel)
os.remove('test')
os.rename('.test','test')

猜你喜欢

转载自www.cnblogs.com/ddxxn/p/9222065.html