January 30, 2026
文件操作示例
本文档介绍文件读写、定位及异常处理。示例来源:doc/pikapython.com/examples/builtins/。
模块简介
支持 open()、read/readline/readlines、write/writelines、seek、close 等。内嵌示例:
f = open('data.txt', 'r')
s = f.read(10)
f.close()
f = open('out.txt', 'w')
f.write('Hello\n')
f.close()
示例代码
基本读写(file.py)
f = open('test/python/main.py', 'r')
s = f.read(10)
print(s)
f.close()
f = open('test/assets/test.jpg', 'rb')
b = f.read(-1)
print(b)
f.close()
f = open('test/out/write.txt', 'w')
f.write('Hello World!\n')
f.close()
说明:文本读前 10 字节、二进制整文件读取、文本写入。设备上请将路径改为实际存在的文件。
按行读取(file2.py)
f = open('test/python/main.py', 'r')
s = f.readline()
print(s)
lines = f.readlines()
print(lines)
f.close()
说明:readline() 读一行,readlines() 读剩余所有行到列表。
多行写入(file3.py)
f = open('test/out/file3.txt', 'w')
seq = [
'This is the first line.\n',
'This is the second line.\n',
'This is the third line.\n'
]
f.writelines(seq)
f.close()
说明:writelines() 将字符串列表写入文件,不会自动加换行,需在字符串中包含 \n。
文件未找到处理(file_nofound.py)
try:
f = open("_no_file.txt", "r")
except:
print("File not found")
说明:用 try/except 捕获打开失败,避免脚本因缺失文件而中断。
文件定位(seek.py)
f = open('test/assets/test.jpg', 'rb')
len = f.seek(0, 2)
print(len)
f.close()
说明:seek(0, 2) 将位置移到文件末尾并返回当前偏移(即文件长度)。模式 2 表示从末尾计算。
write 方法引用(write_fn.py)
f = open('test/out/_test.txt', 'w')
w = f.write
n = w('test')
f.close()
assert n == 4
print('PASS')
说明:将 f.write 赋给变量后调用,返回值是写入的字节数。
大文件写入与内存(write_issue.py)
from PikaStdLib import MemChecker as mem
a = open(".test.py", "wb")
m0 = mem().getNow()
for i in range(1000):
n = a.write(b'# print(r_data[0])\n# print(r_data[1])\n\n# import _thread\n# import')
assert n == 64
m1 = mem().getNow()
for i in range(1000):
n = a.write(b'import osTimer33332 cnt=0332 cnt1=033332 def test_cb(arg):332global cnt332cnt+=1332123123123123231231')
assert n == 101
m2 = mem().getNow()
a.close()
print('PASS')
print('mem: ', m2- m0)
exit()
说明:循环写入并配合 MemChecker 观察内存变化;设备上可用类似方式做简单内存监控。
大文件读取(bigfile.py)
f = open('test/assets/pic1.jpg', 'rb')
b = f.read(-1)
f.close()
说明:read(-1) 读取整个文件到内存,大文件时注意设备 RAM 限制。
注意事项
- 路径需符合设备文件系统(如 LittleFS),且文件已存在或目录可写。
- 读写后应
close(),或使用with(若运行时支持)以避免资源泄漏。 - 二进制模式使用
'rb'/'wb',文本模式使用'r'/'w'。