[Python3] 040 文件 一般使用

Posted YorkFish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Python3] 040 文件 一般使用相关的知识,希望对你有一定的参考价值。

文件

  • 长久保存信息的一种数据信息集合
  • 常用操作
    • 打开关闭(文件一旦打开,需要关闭操作)
    • 读写内容
    • 查找

1. open 函数

  • 负责打开文件
  • open(file, mode=‘r‘, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
    • 第一个参数: 必须有,表示文件的路径和名称
    • mode:表明文件用什么方式打开
参数 释义
r 以只读方式打开(默认
w 写方式打开,会覆盖以前的内容
x 创建方式打开,如文件已经存在,报错
a a for append,以追加的方式对文件内容进行写入
b b for binary,二进制方式写入
t 文本方式打开(默认
+ 可读写
U universal newline mode (deprecated)
>>> f = open("text.txt", 'w')  # 使用了 w,若目录中没有所指定的文件,会先自动创建
>>> f.close()  # f 也称“文件句柄”
>>> 

2. with 语句

  • with 语句使用的技术是一种称为上下文管理协议的技术(ContextManagementProtocal)
  • 自动判断文件的作用域,自动关闭不再使用的已打开的文件句柄
>>> with open("text.txt") as f:
...   pass
...
>>> 

3. 先写再读

  • 上面新建了一个 text.txt,别浪费了

3.1 写

3.1.1 write(string)

  • 向文件写入一个字符串或字节流
  • 每次写入后,都会记录一个“写入指针”
  • 该方法可以反复调用,每次都在上回记录的“写入指针”后写入内容,直至文件被关闭
>>> with open("text.txt", 'a') as f:
...   f.write("风急天高猿啸哀
")
...   f.write("渚清沙白鸟飞回
")
...   f.write("无边落木萧萧下
")
...   f.write("不尽长江滚滚来
")
...
8
8
8
8
>>> 

3.1.2 writeline(lines)

  • lines 代表一个列表
  • 功能:直接将列表类型的各元素连接起来写入文件
>>> lines = ["万里悲秋常作客
", "百年多病独登台
", "艰难苦恨繁霜鬓
", "潦倒新停浊酒杯
"]
>>> with open("text.txt", 'a') as f:
...   f.writelines(lines)
...
>>> 

3.1.3 两种方法的区别

  • write 函数的参数只能是字符串
  • writerlines 的参数可以是字符串,也可以是字符序列

3.2 读

3.2.1 read()

  • f.read(size=-1)
  • 从文件中读入整个文件内容
  • 参数可选,如果给出,则读入前 size 长度的字符串或字节流
>>> with open("text.txt") as f:
...   f.read()
...
'风急天高猿啸哀
渚清沙白鸟飞回
无边落木萧萧下
不尽长江滚滚来
万里悲秋常作客
百年多病独登台
艰难苦恨繁霜鬓
潦倒新停浊酒杯
'
>>> 
>>> f = open("text.txt")
>>> f.read(8)
'风急天高猿啸哀
'
>>> f.read(8)
'渚清沙白鸟飞回
'
>>> f.close()
>>> 

3.2.2 readline()

  • f.readline(size = -1)
  • 从文件中读入一行内容
  • 参数可选,如果给出,则读入该行前 size 长度的字符串或字节流
>>> f = open("text.txt")
>>> f.readline()
'风急天高猿啸哀
'
>>> f.readline()
'渚清沙白鸟飞回
'
>>> f.close()
>>> 

3.2.3 readlines()

  • f.readlines(hint=-1)
  • 从文件中读入所有行,以每行为元素形成一个列表
  • 参数可选,如果给出,读入 hint
>>> with open("text.txt") as f:
...   for line in f.readlines():
...     print(line, end='')
...
风急天高猿啸哀
渚清沙白鸟飞回
无边落木萧萧下
不尽长江滚滚来
万里悲秋常作客
百年多病独登台
艰难苦恨繁霜鬓
潦倒新停浊酒杯
>>> 
  • 文件句柄可以强制转成 list
>>> with open("text.txt") as f:
...   for line in list(f):
...     print(line, end='')
...
风急天高猿啸哀
渚清沙白鸟飞回
无边落木萧萧下
不尽长江滚滚来
万里悲秋常作客
百年多病独登台
艰难苦恨繁霜鬓
潦倒新停浊酒杯
>>> 

4. “位置”的查询与移动

4.1 tell()

  • 显示文件“读写指针”的当前位置
>>> f = open("text.txt")
>>> f.tell()
0
>>> f.readline()
'风急天高猿啸哀
'
>>> f.tell()
16
>>> f.read(4)
'渚清沙白'
>>> f.tell()
24
>>> 
  • read 与 tell 使用的不是一个单位

4.2 seek(cookie, whence=0)

  • 改变当前文件操作指针的位置
  • whence
    • 0:文件开头(默认
    • 1:从文件当前位置开始偏移
    • 2:文件结尾
  • 移动的单位是字节(byte)
  • 一个汉字由若干个字节构成,一般为 2,也有例外
  • 返回文件只针对当前位置
>>> f = open("text.txt")
>>> f.read(4)
'风急天高'
>>> f.tell()
8
>>> 
>>> f.seek(0)
0
>>> f.readline()
'风急天高猿啸哀
'
>>> 
>>> f.seek(8, 0)
8
>>> f.readline()
'猿啸哀
'
>>> 

以上是关于[Python3] 040 文件 一般使用的主要内容,如果未能解决你的问题,请参考以下文章

scrapy按顺序启动多个爬虫代码片段(python3)

学习笔记:python3,代码片段(2017)

scrapy主动退出爬虫的代码片段(python3)

UT源码 040

51单片机对SPI总线上挂接多个25AA040的读写操作+Proteus仿真

040.文件的字数统计程序