欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

课上笔记(4)(文件操作)

程序员文章站 2024-01-29 19:44:52
...

课上笔记(4)(文件操作)

  • 学习使我快乐

文件的打开与关闭

文件处理的步骤:打开,操作,关闭

在不对文件进行任何处理时,文件处于存储状态
如果要对该文件进行处理,首先我们要使该文件处于占用状态
存储状态 ←———— 文件存储在硬盘中(个人理解成:等活)
占用状态 ←———— 只有一个程序可以对该文件进行处理(个人理解成:垄断)
而打开(open),关闭(close)就是对 存储状态 和 占用状态 进行 状态转换 的

  • open:
    固定格式是:open(‘文件名.文件格式’, ‘打开方式’)
    打开方式分为:
    r :只读
    w :覆盖掉原有,进行重写
    a :在原有上进行添加
    b :二进制打开(与其他模式混合使用)比如:f = open(‘a.txt.txt’, ‘rb’)
    +:读,写(与其他模式混合使用)比如:f = open(‘a.txt.txt’, ‘r+’)
文件名:a.txt
其内容:
abc123

输入:
	f = open('a.txt.txt', 'r')
	print(f.read())
	f.close()	

输出:
	abc123

在打开文件以后,我们可以对其进行读和写的操作,常见的读文件函数和写文件函数如下

读文件函数:
  • f.read(x) ←———— 读取文件中前x个字节,可省略,如省略则读取所有内容
文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345

输入:
	f = open('a.txt.txt', 'r')
	print(f.read(10))
	f.close()

输出:
	abc 123
	ab
  • f.readline() ←———— 从文件中读取第一行内容作为结果返回
文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345

输入:
	f = open('a.txt.txt', 'r')
	print(f.readline())
	f.close()

输出:
	abc 123
  • f.readlines() ←———— 把文件的每行作为一个字符串塞进列表返回
文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345

输入:
	f = open('a.txt.txt', 'r')
	print(f.readlines())
	f.close()

输出:
	['abc 123\n', 'abc 1234\n', 'abc 12345']
写文件函数:
  • write ←———— 把字符串s的内容写入文本文件
文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345

输入:
	f = open('a.txt.txt', 'a')
	s = 'abc\n123'
	f.write(s)
	f.close()

运行:
	文件名:a.txt
	其内容:
	abc 123
	abc 1234
	abc 12345abc
	123
  • writelines(s) ←———— 把字符串列表写入文本文件
文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345

输入:
	f = open('a.txt.txt', 'r+')
	s = ['abc 123\n', 'abc 456']
	f.writelines(s)
	f.close()
运行:
	文件名:a.txt
	其内容:
	abc 123
	abc 1234
	abc 12345abc 123
	abc 456

关于文件的对象属性的一些操作方法:

  • seek ←———— 更改指针的位置
    两个参数,一个是偏移量,一个是基准量(默认为0为从文件头开始,1为当前位置,2为文件末尾开始计算)
    公式:seek(x,y)x是推移的字节数,y是从哪里开始计算偏移
文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345
输入:
	f = open('a.txt.txt', 'r')
	print(f.read(3))
	print('————')
	print(f.read(3))
	f.close()

输出:
	abc
	————
	 12

不知道为什么

y不能是非0!。y可以是0,但是y不能是非0!

相当于是y可以存在,但是y只能是0!

否则报错:

io.UnsupportedOperation: can’t do nonzero cur-relative seeks

seek就是把指针从y(0:从头,1:从当前,2:从末尾)向后推x个字节
  • 从头开始
文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345
输入:
	f = open('a.txt.txt', 'r')
	print(f.read(3))
	print('————')
	f.seek(1,0)
	print(f.read(3))
	f.seek(2,0)
	print(f.read(3))
	f.close()

输出:
	abc
	————
	c 1
	bc 
  • 从当前开始
文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345
输入:
	f = open('a.txt.txt', 'r')
	print(f.read(3))
	print('————')
	f.seek(2,1)
	print(f.read(3))
	f.close()

输出:
	abc
	————
	123
  • 从末尾开始
文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345
输入:
	f = open('a.txt.txt', 'r')
	print(f.read(3))
	print('————')
	f.seek(2,2)
	print(f.read(3))
	f.close()

输出:
	abc
	————

  • closed ←———— 判断文件是否关闭,关闭则返回True
文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345

输入:
	f = open('a.txt.txt', 'a')
	print(f.closed)
	f.close()
	print(f.closed)

输出:
	False
	True
  • mode ←———— 返回文件的打开模式
文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345

输入:
	f = open('a.txt.txt', 'a')
	print(f.mode)
	f.close()

输出:
	a
  • name ←———— 返回文件的名称
文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345

输入:
	f = open('a.txt.txt', 'a')
	print(f.name)
	f.close()

输出:
	a.txt.txt

关闭文件的方法:

  • close ←———— 把缓存区的内容写入文件,关闭文件
文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345

输入:
	f = open('a.txt.txt', 'a+')
	print(f.read())
	s = 'abc\n123'
	f.write(s)
	f.close()
	print('close以后')
	print(f.read())
输出:
	abc 123
	abc 1234
	abc 12345
	close以后
	报错:
	ValueError: I/O operation on closed file.
文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345abc
123
  • flush ←———— 把缓存区的内容写入文件,但是不关闭文件
文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345

输入:
	f = open('a.txt.txt', 'a+')
	s = 'abc\n123'
	f.write(s)
	print(f.read())
	f.flush()
	print('flush以后')
	print(f.read())
	f.close()
运行:
输出:
	abc 123
	abc 1234
	abc 12345
	flush以后
	abc 123
	abc 1234
	abc 12345abc
	123

文件名:a.txt
其内容:
abc 123
abc 1234
abc 12345abc
123
相关标签: Python 文件操作