第四章 文件操作
文件操作主要用来读取、修改、和创建指定文件。
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: **
- 文件在存储的时候,是连续存储的。文件较大时可以按行读取,修改。
- 按行读取时,一定要注意一行结束位置有 \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)
☞☞☞ 古人学问无遗力,少壮工夫老始成。纸上得来终觉浅,绝知此事要躬行。 ☜ ☜ ☜