文件操作

文件操作

什么是文件?

所谓“文件”,就是在我们的电脑中,以实现某种功能、或某个软件的部分功能为目的而定义的一个单位。

为什么要有文件

内存无法永久保存数据,但凡我们想要永久保存数据都需要把文件保存到硬盘中,而操作文件就可以实现对硬件的操作。

文件的打开过程

  • step1 点击需要打开的文件
  • step2 操作系统接收到命令,将文件路径传送给CPU
  • step3 CPU根据路径去硬盘中寻找文件,然后调取到内存中
  • step4 操作系统将调取的文件显示出来,可进行读写保存等操作

python如何操作文件

现在我有一段字符串需要存储到文件中,该如何通过编程进行实现呢?

str1 = 'Bonnie is a beautiful girl'

从硬盘中读取数据

在python中有一个open(file,mode,encoding )函数打开某个具体的文件

  • file 代表文件路径
  • mode 表示文件操作模式,默认为只读不写
  • encoding 表示文件解码方式
open(r'D:\Python编程文件\编程Myself\测试文件')

如果给列表增加值,我们需要给列表赋值后才能给对应的列表增加值,文件同样是如此

lis = [1,2,3]
lis.append(4)
# 打开文件

f = open(r'E:\学习资料\Python编程文件\编程Myself\38a.txt')
print(frzaf)
<_io.TextIOWrapper name='E:\\学习资料\\Python编程文件\\编程Myself\\38a.txt' mode='r' encoding='cp936'>

文件的打开方式

打开文件后,文件不仅占用了内存,还对应了操作系统打开的文件,相当于使用文件编辑器打开了一个文件。之前说过,操控文件的目的就是存和取,因此打开文件不是目的,读和写才是目的,所以我们要尝试如何读写文件。

读入模式( read模式)

f = open(r'D:\Python编程文件\编程Myself\测试文件',mode='r',encoding='utf-8')
print(f.read())
f.close()
Bonnie is a beautiful girl

写入模式( write模式)

fw = open(r'D:\Python编程文件\编程Myself\测试文件',mode='w',encoding='utf-8')
fw.write('hades is handsome')
fw.flush()
fw.close()      # 将"Bonnie is a beautiful girl"替换成了hades is handsome
'''
最终打印结果:
hades is handsome
'''

绝对路径和相对路径

  • 绝对路径就是从根目录开始,如open(r'D:\Python编程文件\编程Myself\测试文件')
  • 相对路径就是文件都处在同一个文件夹中,如open(r'测试文件')

with管理文件操作上下文

  • 实现文件的打开
with open(r'D:\Python编程文件\编程Myself\测试文件', 'r', encoding='utf8') as fr:
    data = fr.read()
    print(data)
hades is handsome
Bonnie is a beautiful girl
  • 实现文件write
with open(r'D:\Python编程文件\编程Myself\测试文件', 'w', encoding='utf8') as f:
   f.write('hades is handsome')
with open(r'D:\Python编程文件\编程Myself\测试文件', 'r', encoding='utf8') as fr:
    data = fr.read()
    print(data)
hades is handsome
with open(r'D:\Python编程文件\编程Myself\测试文件', 'a', encoding='utf8') as f:
   f.write('\nBonnie is a beautiful girl')
with open(r'D:\Python编程文件\编程Myself\测试文件', 'r', encoding='utf8') as fr:
    data = fr.read()
    print(data)
hades is handsome
Bonnie is a beautiful girl
  • 实现文件的拷贝
with open('test', 'r', encoding='utf8') as fr, \
        open('test1', 'w', encoding='utf8') as fw:
    data = fr.read()
    fw.write(data)

绝对路径和相对路径

绝对路径

在windows系统中,绝对路径是从盘符开始的,如C:\,D:\

  • D:\Python编程文件\编程Myself\测试文件

相对路径

相对路径就是相对于当前文件所在的路径,就是从本层文件中找

f = open('测试文件')    # 这就是相对路径

文件的三种打开方式

文件打开之r模式

r:表示read,只读模式,只能读不能写,当文件不存在时会报错

f = open(r'E:\学习资料\Python编程文件\编程Myself\38a.txt',mode='r',encoding='utf-8')
print(f.read())
f.close()
bonnie is a beautiful girl
# rt:表示用text读取文本文件

# 我们的操作系统默认编码为gbk,因此需要使用utf-8编码

f = open(r'E:\学习资料\Python编程文件\编程Myself\38a.txt',mode='rt',encoding='utf-8')
data = f.read()
print(data)
print(type(data))
f.close()
bonnie is a 漂亮的  girl
<class 'str'>
# rb:表示用二进制读取文本文件

# b模式是通用的模式,因为所有的文件在硬盘中都是以二进制的形式存储的,需要注意的是:b模式读写文件,
# 一定不能加上encoding参数,因为二进制无法再编码。


f = open(r'E:\学习资料\Python编程文件\编程Myself\38a.txt',mode='rb')
data = f.read()
print(data)
print(type(data))
f.close()
b'bonnie is a \xe6\xbc\x82\xe4\xba\xae\xe7\x9a\x84  girl'
<class 'bytes'>

f.read()读取文件时指针会跑到文件的最后面,如果再次读取,将会是空格

f = open(r'E:\学习资料\Python编程文件\编程Myself\38a.txt',mode='r',encoding='utf-8')
data1 = f.read()
print(1,data1)
data2 = f.read()
print(2,data2)
f.close()
1 bonnie is a 漂亮的  girl
2 

如果文件过大,read一次性读取文件所有内容,很容易造成电脑卡死,因此我们可以使用f.readline()/f.readlines()读取文件

文件打开之w模式

w:表示write,只能写不能读,需要先清空文件再写入内容;当文件不存在时,会先创建文件后再写入

fw = open(r'E:\学习资料\Python编程文件\编程Myself\38a.txt',mode='w',encoding='utf-8')
fw.write('hades is handsome')
fw.flush()
fw.close()      # 将"Bonnie is a beautiful girl"替换成了hades is handsome
'''
最终打印结果:
hades is handsome
'''

文件打开之a模式

w:表示追加,文件存在,则在文件的末端写入内容;文件不存在的时候会创建文件后写入内容。

fa = open(r'E:\学习资料\Python编程文件\编程Myself\38a.txt',mode='a',encoding='utf-8')
fa.write('hades is handsome')
fa.write('\nBonnie is a beautiful girl')
fa.flush()
fa.close()     
'''
最终打印结果:
hades is handsome
Bonnie is a beautiful girl
'''

with管理文件操作上下文

之前我们使用open打开文件的时候,我们还需要进行手动释放文件对内存的 占用,所以很不方便,其实还有更好的方法打开文件,就是python中的上下文管理工具----with open().

with open(r'E:\学习资料\Python编程文件\编程Myself\38a.txt',mode='r',encoding='utf-8') as fr:
    print(fr.read())
hades is handsomehades is handsome
Bonnie is a beautiful girl

with open()不仅提供自动释放内存的方法,还可以一次打开多个文件,中间使用逗号隔开,实现文件的快速拷贝。

文件的高级应用

可读/可写

  • r+t:可读、可写
  • w+t:可写、可读
  • a+t:可追加、可读
with open('36w.txt', 'wt', encoding='utf-8') as fw:
    print(fw.readable())
    print(fw.writable())
False
True
with open('36w.txt', 'w+t', encoding='utf-8') as fw:
    print(fw.readable())
    print(fw.writable())
True
True
with open('36w.txt', 'r+t', encoding='utf-8') as fr:
    print(fr.readable())
    print(fr.writable())
True
True

文件内的指针移动

当文件内容中间需要增加内容时,单纯的使用w和a模式已无法实现,所以我们需要对文件内的指针进行移动

  • 指针就是我们眼中的光标

==硬盘上从来没有修改一说,硬盘上只有覆盖,即新内容覆盖新内容。==

seek(offset,whence)

  • offset代表文件指针的偏移量,单位是字节,

  • whence代表光标的位置,0表示文件的开头,1代表当前光标位置,2表示文件末尾

with open(r'E:\学习资料\Python编程文件\编程Myself\38a.txt',mode='rt',encoding='utf-8') as fr:
    data = fr.seek(8,0)
    print(data)
8

tell()

每次统计都是从文件的开头到当前指针所在的位置

with open(r'E:\学习资料\Python编程文件\编程Myself\38a.txt',mode='rt',encoding='utf-8') as fr:
    data = fr.seek(3,0)
    print(fr.tell())
3

read(n)

只有在模式下的read(n),n代表的是字符个数,除此之外,其他但凡涉及文件指针的都是字节个数

with open(r'E:\学习资料\Python编程文件\编程Myself\38a.txt',mode='rt',encoding='utf-8') as fr:
    fr.seek(4,0)     # 指针现在正在第四个字节处
    data = fr.read(3) # 从第4个字节向后读3个字符
    print(data)
s i

truncate(n)

truncate(n)是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate()要在r+或a或a+等模式下测试效果。它的参照物永远是文件头。并且truncate()不加参数,相当于清空文件。

with open(r'E:\学习资料\Python编程文件\编程Myself\38a.txt',mode='rt+',encoding='utf-8') as fr:
    fr.truncate(3)     
    print(fr.read())
had

转载于:https://www.cnblogs.com/Hades123/p/10845512.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值