第四章 文件操作

​ 文件操作主要用来读取、修改、和创建指定文件。

4.1 文件基本操作

1. 文件打开格式

f = open('文件路径',mode='r/w/a...',encoding='utf-8')    # 不写会默认

2. 文件写入格式

  • file.write(str)将字符串写入文件,返回的是写入的字符长度
# mode= 'w'
# 打开文件时,会先清空历史文件,没有则创建
f.write('a')

3. 文件读取格式

# mode= 'r'
# way1 整个文件直接读取到RAM
f.read()
f.read(1) # 如果指定编码格式,会读出 1 个字符
					# 如果是 mode= rb 会读出 1 个字节

# way2 按行读取文件
# 一般用于for循环中,可用来读取 GB 级别的文件
f.readline() 只读取一行
f.readlines()  # 一次性加载所有内容到内存,并根据行分割成字符串
# 读取一行时也可以使用
for line in v:
  	line = line.strip('\n')

4. 文件的关闭

# 当对文件操作完成后必须关闭,否则不会存储到本地磁盘
f.colse()
# 刷新缓冲区里任何还没写入的信息

4.2 打开模式

1. mode 分类

​ mode常见的有r/w/a(只读/写/追加),r+/w+/a+(读写/写读/追加读),rb/wb/ab(以二进制方式进行读/写/追加),r+b/w+b/a+b

模式 r r+ w w+ a a+
+ + + +
+ + + + +
创建 + + + +
覆盖 + +
指针在开始 + + + +
指针在结尾 + +

4.3 其他操作

​ 断点续传,通过终端与服务器之间的交互,找到文件断点位置,从而实现文件的单次传输。此种操作可以使用file.seek(n)实现,n表示字节数。

1. 文件定位

seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。

  • file.seek(n)

  • 光标移动到指定字节位置。注意

  • file.tell()

    • 返回当前光标位置。可以用于断点续传技术。

2. 重命名和删除文件

  • rename()方法需要两个参数,当前的文件名和新文件名。
# 示例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
# 重命名文件test1.txt到test2.txt。
os.rename( "test1.txt", "test2.txt" )
  • 你可以用remove()方法删除文件,需要提供要删除的文件名作为参数。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
# 删除一个已经存在的文件test2.txt
os.remove("test2.txt")

3. f.flush()

  • 强制把内存中的数据,刷到硬盘中。主要用于操作文件时间过长,无法自动保存的问题。
v = open('a.txt',mode='a',encoding='utf-8')
while True:
  	val = input('请输入:')
  	v.write(val)
 	 	v.flush()		# 强制把内存中的数据,刷到硬盘中
v.close()

4.4 一次性操作文件

v = open('a.txt', mode='a', encoding='utf-8')
v1 = v.read()
v.close()
# 缩进中的代码执行完毕后,自动关闭文件
with open('a.txt', mode='a', encoding='utf-8') as v:
	data = v.read()

4.5 文件修改(示例)

**Note: **

  1. 文件在存储的时候,是连续存储的。文件较大时可以按行读取,修改。
  2. 按行读取时,一定要注意一行结束位置有 \n
# 示例1 
# 文件的修改,需要先把内容读到内存,修改后再存储
with open('a.txt', mode='r', encoding='utf-8') as v:
	data = v.read()
print(data)

new_data = data.replace('a', 666)
with open('a.txt', mode='w', encoding='utf-8') as v:
	data = v.wirte(new_data)
# 示例2  修改指定字符
# 大文件的修改
f1 = open('a.txt', mode='r', encoding='utf-8')
f2 = open('b.txt', mode='r', encoding='utf-8')
for line in f1:
  	line = line.replace('a', 'b')
    f2.write(line)
f1.close
f2.close
# 一次性打开修改和关闭
with open('a.txt', mode='r', encoding='utf-8') as f1,open('b.txt', mode='r', encoding='utf-8') as f2:
	for line in f1.readlines():
# 或者如下写法
	for line in f1:   # 这种写法,也会一行行读取,包括 \n 也会单独一行读出
  	line = line.replace('a', 'b')
    f2.write(line)
posted @ 2019-10-15 21:57  RunningForever  阅读(106)  评论(0编辑  收藏  举报