1.文件操作基本知识
1.内置函数 open()
调用格式:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
file:要打开的文件名或路径。
mode:打开文件的模式,默认为只读模式 'r'。其他常用的模式有 'w'(写入模式)、'a'(追加模式)、'b'(二进制模式)等。
buffering:指定缓冲策略,默认为 -1,表示使用系统默认缓冲区大小。
encoding:指定打开文件时的编码方式,默认为 None,表示使用系统默认编码。
errors:指定编码错误处理方式,默认为 None,表示使用默认错误处理方式。
newline:指定在写入文件时使用的换行符,默认为 None,表示使用系统默认换行符。
closefd:指定是否在文件关闭后关闭底层的文件描述符,默认为 True。 opener:指定一个自定义的打开器函数或类,用于打开文件。
模式 | 说明 |
r | 读模式(默认模式,可省略),若文件不存在则抛出异常 |
w | 写模式,若文件已存在,先清空原有内容 |
x | 写模式,创建新文件,若文件已存在,抛出异常 |
a | 追加模式,不覆盖文件中原有内容 |
b | 二进制模式(可与其它模式组合),使用时不允许指定 encoding 参数 |
t | 文本模式(默认,可省) |
+ | 读、写模式(可与其它模式组合) |
2.文件对象常用方法
open()函数正常执行时,返回一个可迭代的文件对象,通过该文件对象对文件进行读写操作。
方法 | 功能说明 |
close() | 把缓冲区内容写入文件,同时关闭文件,并释放文件对象 |
read([size]) | 从文本文件读取 size 个字符并返回,或从二进制文件读取指定数量字节并返回,若省略 size 则表示读取所有内容 |
readline() | 从文本文件读取一行内容作为结果返回 |
readlines() | 把文本文件中每行文本作为一个字符串存入列表并返回 |
seek(offset[,whence]) | 把文件指针移动到指定位置,offset 表示相对于 whence 的偏移量,whence 为 0 表示从头开始计算(默认),1 表示从当前位置开始计算,2 表示从文件尾开始计算 |
tell() | 返回文件指针的当前位置 |
write(s) | 把字符串 s 的内容写入文件 |
writelines(s) | 把字符串列表写入文本文件,不添加换行符 |
3.上下文管理语句with
关键字with 可以自动管理资源,确保不管是否异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭。
调用格式:
with open(filename, mode, encoding) as fp: # 通过文件对象 fp 读写文件内容
2.文本文件操作
例1:
遍历文件 data2_2.txt 中所有行,统计每一行中字符的个数。
示例代码:
with open('data2_2.txt', encoding='utf-8') as fp:
L1 = []
L2 = []
for line in fp:
L1.append(len(line))
L2.append(len(line.strip())) # 去掉换行符
data = [str(num)+'\t' for num in L2] # 转换为字符串
print(L1)
print(L2)
with open('data2_2.txt', 'w', encoding='utf-8') as fp2:
fp2.writelines(data)
示例文件:
运行结果:
[6, 11, 16, 22, 19, 16, 17, 22, 19, 16]
[5, 10, 15, 21, 18, 15, 16, 21, 18, 15]
例2:
随机产生一个数据矩阵,存入具有不同分隔符格式的文本文件,再把数据提取出来。
示例代码:
import numpy as np
a = np.random.rand(6, 8) # 生成 6*8 的[0, 1)上均匀分布的随机数矩阵
np.savetxt("data2_43_1.txt", a) # 存在以制表符分隔的文本文件
np.savetxt("data2_43_2.csv", a, delimiter=',') # 存成以逗号分隔的 CSV 文件
b = np.loadtxt("data2_43_1.txt") # 加载空格分隔的文本文件
c = np.loadtxt("data2_43_2.csv", delimiter=',') # 加载 CSV 文件
运行结果: