-
Notifications
You must be signed in to change notification settings - Fork 407
文件读写 说明文档
冬日新雨 edited this page Dec 26, 2022
·
7 revisions
使用迭代器形式读取文件内容,节省内存。文件指定为每行存储一条数据,
目的是为了避免重复编写 with open ...
。
文件example.txt
组织形式如下
张三丰
小丽
美国
{"日本": 123}
读取至内存
>>> for line in jio.read_file_by_iter('example.txt'):
... print(line)
- 读取顺序从前至后,可通过
line_num(int)
指定需要的行数 - 若文件中有
\n
空行,可以使用skip_empty_line(bool)
来控制是否跳过 - 每行数据包含
\r\n\t
等特殊字符,可以使用strip(bool)
来控制是否执行 str.strip() - 若每行的数据是 json 格式的,可以自动执行
json.loads
进行加载。
按行读取文件内容。文件指定为每行存储一条数据,
目的是为了避免重复编写 with open ...
。
文件example.txt
组织形式如下
张三丰
小丽
美国
{"日本": 123}
读取至内存
>>> res = jio.read_file_by_line('example.txt')
>>> print(line)
# ['张三丰', '小丽', '美国', {"日本": 123}]
- 读取顺序从前至后,可通过
line_num(int)
指定需要的行数 - 若文件中有
\n
空行,可以使用skip_empty_line(bool)
来控制是否跳过 - 每行数据包含
\r\n\t
等特殊字符,可以使用strip(bool)
来控制是否执行 str.strip() - 若每行的数据是 json 格式的,可以自动执行
json.loads
进行加载。 - 相比于
read_file_by_iter
,该方法适合读取占用内存较小的数据。
按行写入文件内容。文件指定为每行存储一条数据,
目的是为了避免重复编写 with open ...
。
>>> data = ['张三丰', '小丽', '美国', {"日本": 123}]
>>> jio.write_file_by_line(data, 'example.txt')
形成如下文件example.txt
,组织形式为:
张三丰
小丽
美国
{"日本": 123}
- 写入顺序从前至后,可使用
start_line_idx(int)
和end_line_idx(int)
控制写入指定位置的元素 - 若数据中有
\n
空行,可以使用replace_slash_n(bool)
来控制是转义 - 若列表中的数据是 json 格式的,可以自动执行
json.dumps
进行加载。
将一段代码用 with 关键字表达的 TimeIt 工具统计代码耗时。
>>> import jionlp as jio
>>> with jio.TimeIt('stat time cost') as ti:
... res = jio.parse_location('石河子市八子村小红旗小学', town_village=True)
... ti.break_point(restart=True) # 用于统计代码段中的一段断点的耗时。
... print(res)
- 执行后可以获取执行耗时,关键字参数依次包括
name(str)
指定代码段的功能含义,可不指定;unit(str)
计时单位,包括 秒(s)与毫秒(ms);no_print(bool)
指定是否打印计时。 -
break_point
打印代码段中截至某一部位的耗时,restart(bool)
说明是否接下来的计时从0开始。
设置 jionlp 的日志打印。
>>> import jionlp as jio
>>> print(jio.logging)
>>> print(jio.logging.handlers)
>>> jio.logging = jio.set_logger(level="WARN", log_dir_name=None)
>>> print(jio.logging.handlers)
>>> jio.logging.warning("这是一条自定义日志...")
- 当执行
import jionlp as jio
后,工具包默认带入INFO
级别日志,并将日志写入用户目录下的.jionlp_logs
子目录。 -
jio.set_logger
可支持调整日志方式,函数接收两个参数,level
设置日志的级别,若该参数为None
,则工具包全程不返回任何日志(包括屏幕日志和文件日志);否则返回屏幕日志;log_dir_name
设置写入日志的目录路径(相对或绝对路径),若该参数为None
,则工具包全程不写入文件日志(仅打印屏幕前台日志)。 - 对于非工具包内部的业务代码,可以直接使用
jio.logging
进行日志打印。
- 有不少用户在进行多进程操作jionlp 时往往会形成多进程争用日志读写权限的问题,此时,应当将jionlp和jiojio的日志权限关闭。
# 多进程关闭写入文件日志代码样例
import jionlp as jio
import jiojio
jio.logging = jio.set_logger(level="WARN", log_dir_name=None)
jiojio.logging = jiojio.set_logger(level="WARN", log_dir_name=None)