python基础之文件读写

在python中无论是从文件中读取内容还是写入内容都需要打开文件,打开文件使用的是内置函数open,open函数中有许多参数,open中只有file是必须参数,其中常用的就是file、mode和encoding三个参数,open函数定义如下:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline =None, colsefd=True, opener=None)
  • 文件模式
模式描述
r以只读方式打开文件,文件指针将会放在文件的开头,这是默认模式
rb以二进制格式打开一个文件用于只读,文件指针放在文件的开头
r+打开一个文件用于读写,文件指针将会放在文件的开头,如果文件不存在则报错
rb+以二进制格式打开一个文件用于读写,文件指针将会放在开头,如果文件不存在则报错
w打开一个文件,只用于写入。如果文件已存在,则覆盖原有的内容;如果不存在则新建文件
w+打开一个文件用于读写。如果文件已存在,则覆盖原有的内容;如果不存在则新建文件
wb以二进制的形式打开一个文件,用于写入。果文件已存在,则覆盖原有的内容;如果不存在则新建文件
wb+以二进制的形式打开一个文件,用于读写。如果文件已存在,则覆盖原有的内容;如果不存在则新建文件
a打开一个文件用于追加内容。如果该文件已存在,则文件指针会放在文件的结尾,新内容追加在已有内容之后;如果文件不存在,则新建文件
a+打开一个文件用于读写。如果该文件已存在,则文件指针会放在文件的结尾,新内容追加在已有内容之后;如果文件不存在,则新建文件
ab以二进制的形式打开一个文件,用于追加内容。如果该文件已存在,则文件指针会放在文件的结尾,新内容追加在已有内容之后;如果文件不存在,则新建文件
ab+以二进制的形式打开一个文件,用于读写。如果该文件已存在,则文件指针会放在文件的结尾,新内容追加在已有内容之后;如果文件不存在,则新建文件

  • 读取文件
新建test.txt文件,写入内容

hello world
hello python
how are you
i'm fine
thanks

常用方法:

  1. read(byte):不加参数默认读取文件所有内容,byte读取多少内容,以b为单位
  2. readline():读取一行内容
  3. readlines():返回文件内容列表,每一行作为列表的元素
f = open('./test.txt', 'r')
#读取1kb内容
txt = f.read(1024)
print(txt)
'''
    hello world
    hello python
    how are you
    i'm fine
    thanks  
'''
f.close()
#读取一行(每读取一行,文件指针移动到下一行开头)
f = open('./test.txt', 'r')
print(f.readline()) #hello world
print(f.readline()) #hello python
f.close()
#使用readlines遍历文件内容
f = open('./test.txt', 'r')
for line in f.readlines():
    print(line)
    
'''
hello world

hello python

how are you

i'm fine

thanks
'''
  • 写入内容

常用方法:

  1. write():向文件中写入内容
  2. writelines():方法接收一个列表作为参数,列表中每一个元素作为一行写入文件中,但是在writelines不会自动添加换行符,需要手动添加换行符才能实现按行写入
f = open('writeme.txt', 'w')
#写入内容
f.write('hello python')
#按行写入
list1 = ['hello\n', 'world\n']
f.writelines(list1)
f.close()
  • 利用二进制读写实现图片的复制
f1 = open('1.jpg', 'rb')
jpg = f1.read()
f2 = open('2.jpg', 'wb')
f2.write(jpg)
f1.close()
f2.close()
  • python中的with...as...语句:

在python中with适用于对I/O、文件流、数据流等资源进行访问的场合,确保不管使用过程中是否发生异常,都会执行必要的清理操作,释放资源。比如:文件使用后自动关闭、线程中锁的自动获取和释放等等。

使用with...as...简化复制图片的例子

with open('1.jpg', 'rb') as f1:
    with open('2.jpg', 'wb') as f2:
        f2.write(f1.read())
  • StringIO和BytesIO

有时候数据并不需要真正写入到文件中,只需要在内存中做读写即可,StringIO和BytesIO把文件保存在内存中,StringIO的操作对象是字符串,如果要操作二进制数据,就需要用到BytesIO。操作和普通文件几乎一样,多了个获取内容的方法getvalue()

from io import StringIO, BytesIO
f1 = StringIO() #创建一个空白的StringIO
f1.write('hello')
f1.write(' ')
f1.write('python')
print(f1.getvalue()) #读取f1对象的内容 hello python
f2 = StringIO('hello\nworld\nwelcome') #创建StringIO的同时写入内容
while True:
    s = f2.readline()
    if s == '':
        break
    print(s)
    '''
      hello

        world
        
        welcome  
    '''

f1.close()
f2.close()

f3 = BytesIO() #创建一个空白的StringIO
f3.write('你好'.encode('gbk'))
print(f3.getvalue()) #b'\xc4\xe3\xba\xc3'
print(f3.getvalue().decode('gbk')) #你好

f4 = BytesIO(b'\xc4\xe3\xba\xc3') #创建ByteIO的同时写入内容
print(f4.getvalue().decode('gbk')) #你好

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值