Skip to content

⚠️ 注意事项

❗ 关闭进程的时机

在调试程序的时候经常会手动关闭进程,在关闭的时候务必注意文件写入状态,如果程序正在写入文件,关闭进程可能导致文件损坏,损失之前采集的数据。

show_msg属性为True时,程序在开始写入和写入结束的时候,会打印提示语句,请务必注意。

❗ 退出前记得保存数据!

本库的几个工具能够在程序关闭时自动记录缓存中的数据,但以下情况例外:

  • 记录器为全局对象,且使用 xlsx 文件
  • 记录器为全局对象,且使用 db 文件
  • 记录器为全局对象,且接收多线程写入数据

为避免意外情况发生,强烈建议在程序结束前显式调用recorder()方法,主动写入数据。

❗ 慎用负数列号

Filler坐标定位方式相当灵活,行号和列号均支持负数,表示从后往前数。

但使用 xlsx 文件时,如果写入的数据长度超过了最大列号(比如在最后一列添加一个长度为 2 的数据),下次写入的时候最大列号就会与上次不一样,导致错位。

from DataRecorder import Filler

f = Filler('test.xlsx', 1, data_col=1)
f.add_data(((1, 2), (3, 4)))  # 写入两列基础数据
f.add_data(('a', 'b'), ('newline', -1))  # 向第二行倒数第一列单元格写入一个数据
f.add_data(('a', 'b'), ('newline', -1))  # 向第二行倒数第一列单元格写入一个数据
f.add_data(('a', 'b'), ('newline', -1))  # 向第二行倒数第一列单元格写入一个数据
f.record()

文件内容:

1 2
3 4
a b
a b
a b

可见后面 3 条语句虽然是一样的,但每次保存文件就往后移一位。

解决方法有几种:

  • 不使用负数列号
  • 避免数据长度超出最大列数
  • 使用 csv 文件。csv 文件最大列数根据第一行列数确定,下面的行添加列数不影响
  • 不自动保存,而使用手动保存,但下次打开文件时依然和这次列数不一样

❗ 二维数组的判断

RecorderFilleradd_data()方法都可以接收二维数组,但也有一维数组里面存在多种数据类型的情况。为了省事,程序以第一个数据的类型来判断接收到的数据是一维还是二维数据。

一维数据把所有数据填在同一行,二维数据每个数据填写一行。

from DataRecorder import Recorder

r = Recorder('test.csv')
data1 = [123, 'abc', (1, 2)]  # 123为单个数据,判断为一维数组
data2 = [(1, 2), 123, 'abc']  # (1, 2)为多个数据,判断为二维数组
r.add_data(data1)
r.add_data(data2)

文件内容:

123 abc (1, 2)
1 2
123
abc

可见第一个add_data()写入了一行数据,第二个写入了 3 行数据。