Julia高效将字符串序列写入文本文件 无引号括号实现方法
Julia 逐行读写有限元输入文件高效实现方案
直接向print传入字符串向量是写入格式异常的核心原因:Julia会直接输出向量的结构化字面表示,也就是你看到的方括号、包裹字符串的引号、元素间逗号等多余符号。循环拼接字符串速度慢,是因为Julia中字符串为不可变对象,反复拼接会触发全量内存复制,文件体积越大性能损耗越明显,这类场景不需要用低效的全量拼接方案。
推荐方案:使用内置writelines(大文件友好,代码最简洁)
Julia 1.4及以上版本提供了原生的逐行写入函数,会自动将可迭代对象中的每个字符串元素单独写入一行,自动补全换行符,采用流式写入逻辑不需要提前拼接全量内容,内存占用低、写入速度快,完全匹配有限元求解器的输入格式要求:
# 读取原inp输入文件 mdl = "fullmodelSVTV" A = readlines("$(mdl).inp") # 在此处添加修改A中指定行参数的业务逻辑 # 写入新文件,无多余格式符号 writelines("name.inp", A)
兼容旧版本Julia的稳妥方案
如果使用的Julia版本低于1.4,可以通过do块打开文件流逐行写入,该写法会自动管理文件句柄,不需要手动调用close避免句柄泄漏,同样是逐行IO操作无额外性能损耗:
# 读取原inp输入文件 mdl = "fullmodelSVTV" A = readlines("$(mdl).inp") # 在此处添加修改A中指定行参数的业务逻辑 # 逐行写入新文件 open("name.inp", "w") do io for line in A println(io, line) end end
补充说明
readlines读取文件时会自动剥离每行末尾的换行符,上述两种写入方案都会自动为每行补全对应系统的换行符,最终输出文件和原文件排版完全一致,无多余符号,可直接传入有限元求解器运行- 两种方案都不需要提前拼接全量文本,处理数百MB甚至GB级的大体积inp文件时也不会出现卡顿、内存占用过高的问题
内容的提问来源于stack exchange,提问作者Stephen Wright
相关产品推荐
相关产品推荐

