Python 极简核心:文件

有几条逻辑先写在前面:

  • 必须首先使用open函数,打开文件之后才有后续的write和read操作
  • 需要在open函数中就定义好文件的使用用途(设置open函数的参数),比如读、写、还是读写、还是追加等等
  • 指针的位置直接影响目标内容

本文章,主要从基本的打开、写、读和文件操作两个大的方向来进行小结。

1. 文件打开、写入、读取的简要概述

open函数

open()函数是Python内置的函数,用来创建一个file对象,记住:有了file对象,相关的方法才可以调用它进行读写
其基本用法为:fileObject = open(xx, x)
这里,xx代表要打开的文件,x指的是参数。
(以下都省略了打开的文件)

open(, r):只读,不创建
open(, r+):读 + 写,不创建
open(, w):只写
open(, w+):写 + 读
open(, a):追加方式写(不覆盖)
open(, a+):追加方式写 (不覆盖)+ 读
即,加号'+'代表额外方式
在这里插入图片描述
注:

  • w+与r+区别
    r+:可读可写,若文件不存在,报错;w+: 可读可写,若文件不存在,创建

write函数

write() 方法用于向文件中写入指定字符串,用法:fileObject.write(str)

read函数

fileObject.read():text ——> one whole str
fileObject.readline():one line ——> one str
fileObject.readlines():all line ——> one list with all lines

指针与seek函数

指针会随你的读写操作而向后移动

  • open文件之后,指针就在文件内容的起始位置
  • write函数之后,指针就在写入的内容之后
  • read函数之后,指针在读取的内容之后,
    例如使用read(),则指针会从起始位置移动,直到文件的末尾

所以,如果发现获取的并非自己想取的内容,很可能就是因为指针的位置不对
这种情况,就应该使用 seek() 来指定指针的位置。

注:seek(0) 指向开头

扫描二维码关注公众号,回复: 13041173 查看本文章

2. 简单例子

这里的例子详细的介绍了 write、read、readline和readlines的用法。

open函数的w模式w+模式

  • 首次写入
# 首次写入
with open('write_files.txt', 'w') as f1:
    f1.write('1 2 3\n4 5 6') # 只要没有退出文件,就可以连续写入
    f1.write('7 8 9')

with open('write_files_w+.txt', 'w+') as f2:
    f2.write('a b c\nd e f')  # 只要没有退出文件,就可以连续写入
    f2.write('g h i')

结果:
(文件中写入的内容)
在这里插入图片描述

  • 再次写入
# 再次写入
with open('write_files.txt', 'w') as f1:
    f1.write('w模式,重新写入...')  # 再次写入会完全清空之前的文件

    # w模式下使用read函数会导致报错(io.UnsupportedOperation: not readable),因为 w 模式不可 读取
    #lines = f1.read()
    #print(lines)

with open('write_files_w+.txt', 'w+') as f2:
    f2.write('w+模式,重新写入...')   # 再次写入会完全清空之前的文件
    f2.seek(0) # 将经过write之后的指针移到文件开头
    red = f2.read()
    f2.seek(0)  # 将经过read之后的指针移到文件开头
    readline = f2.readline()
    f2.seek(0) # 将readline()之后的指针移动到文件开头
    readlines = f2.readlines()
    print(f'read: {red}') # read()读取所有的内容,并且将其作为一个完整的字符串
    print(f'readline: {readline}')  # readline()只读取一行内容,且是字符串格式
    print(f'readlines: {readlines}') # readlines()读取所有行,并将内容放在一个list里(注:由于这里总共只有一行,所以没有用到 for in 来遍历这个列表)

控制台打印结果:

read: w+模式,重新写入...
readline: w+模式,重新写入...
readlines: ['w+模式,重新写入...']

文件中写入的内容:
在这里插入图片描述

open函数的a模式和a+模式

在这里插入代码片
  • a 模式
# 1. a 模式
with open('write_file_a.txt', 'a') as f1:
    f1.write('x y z\n1 2 3')
    # w模式下使用read函数会导致报错(io.UnsupportedOperation: not readable),因为 w 模式不可 读取
    # lines = f1.read()
    # print(lines)

结果:
在这里插入图片描述

  • a+模式
# 2. a+模式
# 首次
with open('write_file_a+.txt', 'a+') as f2:
    f2.write('A B C')
    lines = f2.read()  # 这里是没有东西打印出来的,因为指针现在在最后面
    print(lines)
# 再次
with open('write_file_a+.txt', 'a+') as f2:
    f2.write('1 2 3')
    f2.seek(0) # 将指针移到头部
    lines = f2.read()  
    print(lines)

打印结果:

A B C1 2 3

3. json模块

import json
data = json.load(open('my_file.json', 'r'))

4. 文件操作

(等待完善)

参考:

  1. open函数的一些注意点及r,r+,w,w+,a,a+的区别
  2. Python 文件I/O
  3. python文件打开方式详解——a、a+、r+、w+区别

猜你喜欢

转载自blog.csdn.net/Robin_Pi/article/details/114268437