北京大学Julia语言讲义第6章: 文件

对文本文件
readlines(filename)函数根据输入的文件名读入文件的各行为字符串数组,
每个元素是一行,
缺省行为会读入换行符但结果字符串不包含换行符,
加选项keep=true可以保留换行符。
read(filename, String)将整个文件读入为一个长字符串。

fh = open(filename)打开指定的文件用于读取,
这里fh称为一个文件句柄。
读取如readline(fh)
缺省行为会读入换行符但结果字符串不包含换行符,
加选项keep=true可以保留换行符。
close(fh)关闭fh对应的文件。

很大的文件可以每次读入一行进行处理,框架如:

open(filename) do io
    line = readline(io)
    process(line)
end

fh = open(filename, "w")打开指定的文件用于输出,
写入如println(fh, "x = ", x)
对于字符串s,
也可以用write(fh, s)写入。
结束写入后用close(fh)关闭输出文件。

6.2 文件和目录信息

参考:

  • https://docs.julialang.org/en/v1/base/file/

文件保存在目录(directory)中。
pwd()返回当前的工作目录,
不给定具体路径的文件名默认在工作目录中。
cd(path)设定path为当前工作目录。

因为不同操作系统的文件路径写法不同,
所以尽可能使用Julia的函数来对路径进行操作。
abspath(filename)求一个文件的绝对路径。
dirname(filename)求一个文件所在的目录。
joinpath()将目录与文件连接成一个完整路径。

dirname(path)获取文件路径的目录部分,
basename(path)获取文件路径除去目录的部分。

可以用dirname(@__FILE__)获取正在运行的源程序文件所在的目录。
设这个源文件同级有一个data子目录,
其中有pat.csv数据文件,
可以用

root = dirname(@__FILE__)
fd = joinpath(root, "data", "pat.csv")

获得文件的全路径,保存在变量fd中。

ispath(filename)判断每个文件或者目录是否存在。
isdir(filename)判断某个路径是否目录,
isfile(filename)判断某个路径是否文件。

readdir(path)返回指定目录的文件和子目录列表,
path时对应当前工作目录。

walkdir(path)提供了对一个目录及其中的子目录遍历的功能,
遍历时提供了当前目录、其中的子目录列表、其中的文件列表。

显示一个目录下的所有文件和子目录的样例程序如下:

for (root, dirs, files) in walkdir(".")
    println("正在显示$(root)内容---子目录:")
    for dir in dirs
        println(joinpath(root, dir)) # path to directories
    end
    println("正在显示$(root)内容---文件:")
    for file in files
        println(joinpath(root, file)) # path to files
    end
end

如果不用内置的walkdir函数,
可以递归调用如下:

function mywalk(dir)
    println("正在显示$(dir)内容:")
    ## 先显示所有文件
    for name in readdir(dir)
        path = joinpath(dir, name)
        if isfile(path)
            println(path)
        end
    end
    ## 再深入每个子目录
    for name in readdir(dir)
        path = joinpath(dir, name)
        if isdir(path)
            mywalk(path)
        end
    end
end

mywalk(".")

韭菜热线原创版权所有,发布者:风生水起,转载请注明出处:https://www.9crx.com/75095.html

(0)
打赏
风生水起的头像风生水起普通用户
上一篇 2023年8月18日 23:33
下一篇 2023年8月19日 23:43

相关推荐

  • 年龄歧视、虐待老人,是时候谈论老龄化了

    随着老年人经济虐待现象不断增加,重要的是要记住,我们都在无情地走向老年。到 2030 年,7200 万美国人将年满 65 岁或以上。(1) 好消息是寿命不断延长,人们在老年时仍保持健康和活力。 坏消息是,“老人”的文化观念并没有跟上。世界卫生组织 2016 年的一项分析发现,年龄歧视现象十分普遍,许多人完全没有意识到自己对老年人的偏见。(2) 《今日心理学》…

    2023年7月15日
    9100
  • 市盈率:多种选择:第 2 部分

    上一部分将市盈率(“P/E”)确定为衡量股票市场估值的有用指标。此外,它还详细探讨了将市盈率(即每股收益 – EPS)中的 E 标准化的必要性,并强调了两种更受认可的用于生成可靠市盈率的方法。 如果准确衡量,市盈率不仅仅是市场估值的一个指标;它是股市回报的主要驱动力。注意区别。市盈率不仅仅告诉我们市场是便宜还是昂贵。市盈率的起始水平及其随时间的周…

    2024年1月24日
    34800
  • 现有规则影响了对长期趋势的认知

    作者:Brian McAuley 尽管美联储将利率提高至 22 年来的最高水平,但经济仍然出人意料地保持弹性,预计第三季度增长将轻松超过 2% 的趋势。这是导致一些经济学家质疑利率是否会回到 2020 年之前较低水平的因素之一,即使通胀在未来几年回到美联储 2% 的目标…… ~《华尔街日报》,2023 年 8 月 20 日 长期或长期…

    2023年10月17日
    12700
  • 复利,您金钱最好的朋友

    复利听起来很奇特。在财务规划领域,我们经常谈论如何通过高收益储蓄账户或投资来赚取利息,从而在您尝试增加财富时改变游戏规则。尽管复利可能看起来很复杂或难以实现,但事实是,如果您现在开始储蓄,任何人都可以利用它的好处。 复利如何运作? 复利实际上比大多数人意识到的更简单。我听过的最好的比喻是这样的: 想象一下,您站在山顶上,并且刚刚堆了一个雪球。雪球一开始非常小…

    2023年6月29日
    29000
  • 美联储刚刚达到 2% 的目标吗?

    美联储的下一次利率变动及其“长期走高”的政策口号是基于高且粘性的通胀。通胀已从峰值大幅回落,但不足以动摇美联储正式暂停加息,当然也不足以开始降息。正如美联储提醒我们的那样,降息取决于实现 2% 的通胀目标。虽然没有明确说明,但经济活动大幅放缓或地区银行业问题再次出现也将促使美联储采取行动。 如果我告诉你 CPI 现在实际上是 2%,你会怎么想?美联储的政策立…

    2023年8月26日
    25300

发表回复

登录后才能评论
客服
客服
关注订阅号
关注订阅号
分享本页
返回顶部