用 Lua 操作文件中的数据
创始人
2024-03-02 07:07:44
0

了解 Lua 如何处理数据的读写。

有些数据是临时的,存储在 RAM 中,只有在应用运行时才有意义。但有些数据是要持久的,存储在硬盘上供以后使用。当你编程时,无论是简单的脚本还是复杂的工具套件,通常都需要读取和写入文件。有时文件可能包含配置选项,而另一些时候这个文件是你的用户用你的应用创建的数据。每种语言都会以不同的方式处理这项任务,本文将演示如何使用 Lua 处理文件数据。

安装 Lua

如果你使用的是 Linux,你可以从你的发行版软件库中安装 Lua。在 macOS 上,你可以从 MacPortsHomebrew 安装 Lua。在 Windows 上,你可以从 Chocolatey 安装 Lua。

安装 Lua 后,打开你最喜欢的文本编辑器并准备开始。

用 Lua 读取文件

Lua 使用 io 库进行数据输入和输出。下面的例子创建了一个名为 ingest 的函数来从文件中读取数据,然后用 :read 函数进行解析。在 Lua 中打开一个文件时,有几种模式可以启用。因为我只需要从这个文件中读取数据,所以我使用 r(代表“读”)模式:

function ingest(file)
   local f = io.open(file, "r")
   local lines = f:read("*all")
   f:close()
   return(lines)
end

myfile=ingest("example.txt")
print(myfile)

在这段代码中,注意到变量 myfile 是为了触发 ingest 函数而创建的,因此,它接收该函数返回的任何内容。ingest 函数返回文件的行数(从一个称为 lines 的变量中0。当最后一步打印 myfile 变量的内容时,文件的行数就会出现在终端中。

如果文件 example.txt 中包含了配置选项,那么我会写一些额外的代码来解析这些数据,可能会使用另一个 Lua 库,这取决于配置是以 INI 文件还是 YAML 文件或其他格式存储。如果数据是 SVG 图形,我会写额外的代码来解析 XML,可能会使用 Lua 的 SVG 库。换句话说,你的代码读取的数据一旦加载到内存中,就可以进行操作,但是它们都需要加载 io 库。

用 Lua 将数据写入文件

无论你是要存储用户用你的应用创建的数据,还是仅仅是关于用户在应用中做了什么的元数据(例如,游戏保存或最近播放的歌曲),都有很多很好的理由来存储数据供以后使用。在 Lua 中,这是通过 io 库实现的,打开一个文件,将数据写入其中,然后关闭文件:

function exgest(file)
   local f = io.open(file, "a")
   io.output(f)
   io.write("hello world\n")
   io.close(f)
end

exgest("example.txt")

为了从文件中读取数据,我以 r 模式打开文件,但这次我使用 a (用于”追加“)将数据写到文件的末尾。因为我是将纯文本写入文件,所以我添加了自己的换行符(/n)。通常情况下,你并不是将原始文本写入文件,你可能会使用一个额外的库来代替写入一个特定的格式。例如,你可能会使用 INI 或 YAML 库来帮助编写配置文件,使用 XML 库来编写 XML,等等。

文件模式

在 Lua 中打开文件时,有一些保护措施和参数来定义如何处理文件。默认值是 r,允许你只读数据:

  • r 只读
  • w 如果文件不存在,覆盖或创建一个新文件。
  • r+ 读取和覆盖。
  • a 追加数据到文件中,或在文件不存在的情况下创建一个新文件。
  • a+ 读取数据,将数据追加到文件中,或文件不存在的话,创建一个新文件。

还有一些其他的(例如,b 代表二进制格式),但这些是最常见的。关于完整的文档,请参考 Lua.org/manual 上的优秀 Lua 文档。

Lua 和文件

和其他编程语言一样,Lua 有大量的库支持来访问文件系统来读写数据。因为 Lua 有一个一致且简单语法,所以很容易对任何格式的文件数据进行复杂的处理。试着在你的下一个软件项目中使用 Lua,或者作为 C 或 C++ 项目的 API。


via: https://opensource.com/article/21/3/lua-files

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

10个简单步骤,陪你快速上...
最近,关于“大规模失业”的讨论,越来越多。 为什么?因为AI编程的...
2026-03-05 09:20:48
开源电子书管理工具Cali...
IT之家 2 月 27 日消息,开发者 Kovid Goyal 今...
2026-02-27 17:26:20
微软Win11任务栏和文件...
IT之家 2 月 19 日消息,科技媒体 Windows Late...
2026-02-19 11:48:58
云盘里的 “云” 到底在哪...
云盘服务为用户提供了一种便捷的文件存储方式,它将数据保存在互联网上...
2026-02-05 12:18:21
u盘里的东西不小心删除了怎...
今天使用时发现u盘里的文件消失了。u盘里的东西不小心删除了怎么找回...
2026-02-02 20:18:45
SpaceX申请部署100...
据美国联邦通信委员会备案文件显示,埃隆 马斯克旗下的SpaceX计...
2026-02-01 12:20:24

热门资讯

2020 年的 GitHub ... 距离 2020 年结束只剩下区区 24 天,我们即将结束魔幻的 2020 ,迎来新的一年,新的一年或...
开源新闻速递:openSUSE... 今日关注openSUSE 项目组的 Dominique Leuenberger 在他的周报中说:“这...
KDE4.11 Beta1 正...   KDE 项目工作组刚刚发布了 KDE Software Compilation 4.11 Bet...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
使用时间序列数据,用开源工具助... InfluxData 是一个开源的时间序列数据库平台。下面介绍了它是如何被用于边缘应用案例的。收集到...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Textual:为 Pytho... 快速入门使用 TextualPython 在 Linux 上有像 TkInter 这样的优秀 GUI...
硬核观察 #1245 Open... #1 OpenAI 悄然删除禁止将 ChatGPT 用于 “军事和战争” 的禁令在 1 月 10 日...