Python: 学习系列之九:文件读写

系列

打开文件

file = open('myfile.txt','r') # 以只读方式打开文件;如果文件不存在,会抛出FileNotFoundError异常
file = open('myfile.txx','w') #以只写方式打开文件;如果文件存在则清空文件;如果文件不存在,会创建文件
file = open('myfile.txt', 'a')  # 以只写追回加的方式打开;如果文件存在,从文件末尾开始写;如果文件不存在,会创建文件
file = open('myfile.txt', 'x')  # 以只写方式打开文件;如果文件存在则抛出FileExistsError异常;如果文件不存在,会创建文件
file = open('myfile.txt','r+') #[不能单使用]以读写方式打开,r+/w+/a+/x+都以读写方式打开
file = open('myfile.txt', 'rt')  # [不能单使用]以文本方式打开,默认就是以文本方式打开,rt/xt/wt等
file = open('myfile.txt', 'rb')  # [不能单使用]以二进制方式打开,默认就是以文本方式打开,rb/xb/wb+等

读文件

创建一个myfile.txt,文件内容为

1234567890
abcdefghij
xyz
"""
    read([size]) size是字节数,,负数直接读到文件尾,指定的size不要超过默认的缓冲区的大小,否则可能并不能读取到指定的字节数,可以在io.DEFAULT_BUFFER_SIZE看到,为8192
"""
file = open('myfile.txt','r')
fileContent = file.read(3) 
print(fileContent) # 123
fileContent = file.read()  
print(fileContent)  # 继续接着读,直到文件末尾 4567890\nabcdefghij\nxyz
file.close()
"""
    readline([size]) size是字节数,负数直接读到文件尾
"""
file = open('myfile.txt','r')
fileContent = file.readline(3) 
print(fileContent) # 123
fileContent = file.readline(10)  
print(fileContent)  # 继续接着读,最多读到行末尾 4567890\n
fileContent = file.readline(10)
print(fileContent)  # 继续接着读下一行,abcdefghij
file.close()
"""
    readlines([size]) size是字节数,负数直接读到文件尾
"""
file = open('myfile.txt','r')
fileContent = file.readlines(3) 
print(fileContent) # ['1234567890\n'], 数组,它会读到当前size的行尾
fileContent = file.readlines(11)
print(fileContent)  # ['abcdefghij\n', 'xyz'], 数组,它会读到当前size的行尾
file.close()

写文件

"""
    write(text) 将指定文件写入到文件中,字符串会先写入缓存中,手动调用flush()或close()之后,
    或者当写入的数据量大于等于缓存的容量时,写入到缓存中的字符串才会写入到文件中。
"""
file = open('myfile.txt', 'w')  # 清空已存在的文件
size = file.write('1234567890')
print(size)  # 10

file.flush()
file.close()
"""
    writelines(seq) 将指定文件写入到文件中,字符串会先写入缓存中,手动调用flush()或close()之后,
    或者当写入的数据量大于等于缓存的容量时,写入到缓存中的字符串才会写入到文件中。
"""
file = open('myfile.txt', 'w')  # 清空已存在的文件
size = file.writelines(['1234567890\n','abcdefghij\n','xyz'])
print(size)  # None

file.flush()
file.close()

使用With语句更优雅地关闭文件

"""
    由于文件对象实现了特殊方法__enter__()和__exit__(),所以文件对象可以作为上下文管理器。
    其中,特殊方法__enter__()返回打开的文件对象,特殊方法__exit__()中关闭打开的文件。
    因此,可以使用with语句来实现文件的读写,省去手动关闭文件
"""
with open('myfile.txt','r') as file:
    file.read()
    file.write('something')

文件指针

"""
    自由移动文件指针
    seek(offset[,whence]), offset表示偏移量,whence表示相对偏移位置,有三种取值:
        1. os.SEEK_SET:文件的起始位置,值为0,默认值
        2. os.SEEK_CUR:文件的当前位置,值为1
        3. os.SEEK_END:文件的结尾位置, 值为2

    只有以二进制方式打开的文件才支持以上三种相对偏移位置
    以文本方式打开的文件,只支持相对偏移位置中的文件的起始位置
"""

with open('myfile.txt', 'rb') as file:  # 以二进制方式打开
    print(file.tell())  # 0
    file.seek(3, os.SEEK_SET)
    # file.seek(3,0) #与上一行的代码功能一样
    # file.seek(3)#与上一行的代码功能一样
    print(file.tell())  # 3
    file.seek(4, os.SEEK_CUR)
    print(file.tell())  # 7
    file.seek(-2, os.SEEK_CUR) #向前偏移
    print(file.tell())  # 5

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值