Python文件处理

应用程序运行过程中产生的数据最先都是存放于内存中的,若想永久保存下来,必须要保存于硬盘中。应用程序若想操作硬件必须通过操作系统,而文件就是操作系统提供给应用程序来操作硬盘的虚拟概念,用户或应用程序对文件的操作,就是向操作系统发起调用,然后由操作系统完成对硬盘的具体操作。

一、文件操作的基本流程

1.基本流程

1.1我们能操作的文件有哪些

.txt和没有后缀名的文件

有了numpy、pandas等模块就可以操作word、Excel、PPT等文件

1.2 如何操作文件

Python文件处理主要涉及到打开文件、读取文件内容、写入文件内容、关闭文件等操作。可以使用内置的open()函数打开文件并获取文件对象,然后就可以对文件进行读写等操作。

"""
三步法:

1.打开文件
2.读或写
3.关闭文件
"""

使用open()函数时需要指定文件名和打开方式,常见的打开方式有以下几种:

‘r’:只读方式打开文件,可以读取文件内容,不能够修改文件。

‘w’:写入方式打开文件,如果文件已存在内容,则会覆盖内容,然后写入新的内容;如果文件不存在,则会新建一个文件并写入内容。

‘a’:追加的方式打开文件,如果文件已存在内容,则会在文件内容末尾追加新内容;如果文件不存在,则会新建一个文件并写入内容。

open(‘要操作的文件路径’, ‘读写模式’, ‘字符编码’)

'D:\Python27\day10\a.txt'
# 当路径中出现了字母和斜杠的组合会产生一些特殊的含义,所以我们应该给去掉:
r'D:\Python27\day10\a.txt'
# 在前面加上r

f= open(r'D:\Python27\day10\a.txt', 'r', encoding='utf-8')  # \n \t
# 返回的是句柄
print(f) # <_io.TextIOWrapper name='D:\\Python27\\day10\\a.txt' mode='r' encoding='utf-8'>

1.3读取文件

# helloworld
print(f.read()) # 类似于是文件的内置方法

1.4关闭文件

f.close()

1.5with文件上下管理

另外,还可以使用with语句来打开文件,这样可以确保在使用结束后自动关闭文件,例如:

with open('file.txt', 'r' encoding = 'UTF-8') as f:
    content = f.read()
    print(content)

二、文件读写模式

1. 只读模式

当文件路径不存在是,会直接报错

f = open('b.txt', 'r', encoding='utf-8') #  No such file or directory: 'b.txt'
f = open('a.txt', 'r', encoding='utf-8') #  No such file or directory: 'b.txt'
print(f.read())
f.close()

with open('a.txt', 'r', encoding='utf-8') as f:
    print(f.read())

2.写模式

当文件路径不存在的时候, 会新建出来一个文件,而不报错但是会把以前的数据覆盖掉

with open('a.txt', 'w', encoding = 'UTF-8')as f:
	f.write('hellow')
	f.write('world')
	f.write('jerry')

3.追加模式

当路径不存在的时候,也会新建出来文件,它的写的内容不是覆盖而是追加

with open('a.txt', 'a', encoding = 'UFT-8') as f:
	f.write('hellow1')
	f.write('hellow2')
	f.write('hellow3')
	f.write('hellow4')
	f.write('hellow5')

三、读写操作的相关方法

1.读系列

with open('a.txt', 'r', encoding = 'UTF-8') as f:
	print(f.read()) # read方法是一次性读取文件中所有数据
	print(f.readline()) # readline一次读取一行内容
	print(f.readlines()) # readlines一次读取所有内容,然后把每一行内容作为列表的一个元素返回,返回的数据类型就是列表
	print(f.readable()) # readable判断文件是否可读

2.写系列

with open('a.txt', 'w', encoding = 'UTF-8') as f:
	print(f.write('123', 'kevin', '321'))
	print(f.writelines(['123\n', 'keinv\n', '321\n'])) # 写入多行数据,并换行
	print(f.writeable) # 同只读一样

四、 文件读操作的优化

with open('a.txt', 'r', encoding='utf-8') as f:
    # print(f.read()) # 一次性读取文件的所有数据,并且光标在文件的末尾,如果再去读,就读不到了
    # print(f.read())
    # 文件句柄f是支持for循环的
    for line in f:
        # line: 就是文件的一行内容
        print(line)
    # 了解的方法:
    # f.flush()  # 把数据从内存中立刻刷到磁盘
    """
        当你读取的数据比较小的时候,其实是在缓冲区的,当数据量够多的时候,它会一定刷到磁盘
    """


"""
一次性读取文件的所有数据有什么问题:
    当数据比较多的时候,会出现内存溢出,这种情况是坚决不能出现的
    如何优化以上操作:
        一点一点的读取数据然后把数据赶紧刷到硬盘里
        
"""

五、文件的操作模式

1. 文本模式

t: text            # r   w   a ------>>>rt   wt  at 

with open('a.txt', 'r', encoding='utf-8') as f:
#文本模式默认就是操作字符串
#文本特征:
#1. encoding参数必须指定
#2. 读取的所有的数据都是以字符串为单位的
#3. t模式只能够读取文本或者字符模式

2.二进制模式

b模式:binary

with open('a.txt', 'ab')as f:
#b模式中b不能省略----------->>>  ab  wb  ab

#特征:
#1.encoding='utf-8'参数不能够指定
#2. 读取的数据全部以字节为单位
#3. 二进制模式可以读取任意类型的文件

3.二进制模式下的读写操作

t模式:

with open('a.txt', 'rt', encoding = 'UTF-8')as f:
	print(f.read(5))

f.read()不指定参数,默认读取所有数据
f.read(5)指定了参数,返回的就是字符个数

b模式:

with open('a.txt', 'rb') as f:
	print(f.read(5).decode('UTF-8'))

f.read(5)指定了参数那么返回的就是字节个数,如果有中文字符存在,就是按照3的倍数返回字节

六、控制文件内指针移动

指针:可以理解为光标

with open('a.txt', 'r', encoding='utf-8') as f:
	print(f.read(5)) # 你helloworld
	f.seek(3, 1)
	print(f.read())
	# print(f.read(5))
	# print(f.read())

with open('a.txt', 'rb') as f:
    print(f.read(2))  # helloworld
    f.seek(-3, 2)
    print(f.read())
    # print(f.read(5))
    # print(f.read())

f.seek()
offset: int
代表的是移动的偏移量
如果是正数,就往右边移
如果是 负数,就往左边以----------》左边要可移动
whence: int = 0
代表的是模式
# 模式控制:

#0: 默认的模式,该模式代表指针移动的字节数是以文件开头为参照的: 它能够使用在t和b模式
#1: 该模式代表指针移动的字节数是以当前所在的位置为参照的: 只支持b模式,t模式不行
#2: 该模式代表指针移动的字节数是以文件末尾的位置为参照的

七、文件的修改

with open('a.txt',mode='r+t',encoding='utf-8') as f:
      f.seek(9)
      f.write('<妇女主任>')
mode='r+'    
mode='w+t'
mode='a+t'
# 可读可写
# 可读可写
# 可读可写

1. 硬盘中得数据是不允许直接修改的
2. 内存中得数据是可以直接修改的

'''方式一:'''
# 1. 读取文件内的所有数据
# 快捷键:shift+enter
with open('a.txt', 'r', encoding='utf-8') as f:
    data = f.read()

print(data)

# 2. 读取完字符之后,做字符替换
with open('a.txt', 'wt', encoding='utf-8') as f:
    f.write(data.replace('kevin', 'kevinSB'))
    
'''方式2:'''
import os

with open('a.txt',mode='rt',encoding='utf-8') as read_f, \
        open('.a.txt.swap',mode='wt',encoding='utf-8') as wrife_f:
    for line in read_f:
        wrife_f.write(line.replace('SB','kevin'))

os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值