前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >8 Julia IO操作

8 Julia IO操作

作者头像
猫叔Rex
发布2020-06-30 14:28:45
8420
发布2020-06-30 14:28:45
举报
文章被收录于专栏:科学计算科学计算

读写文件:

csv JLD2 IOBuffer:

IO操作

在对文件的操作中,如果我们未指定文件的路径,则默认的路径为

  • 在使用Atom或vscode时,默认路径即为.jl文件的目录
  • 在使用jupyter notebook时,windows系统默认路径为'C:\Users\用户名\';MAC的目录在jupyter中可以看到
  • 在使用REPL时,系统默认路径为Julia的安装目录,可以执行pwd()命令可查看当前的工作路径,,如果想更换路径,使用cd(dir::String)命令,若想跟换回原始路径,使用homedir()命令

读文件操作

代码语言:javascript
复制
s1 = readlines("sdy.txt")
s2 = open("sdy.txt","r")
line = readline(s2)
eof(s2)
position(s2)
read(s2,Char)
line = readline(s2)
read(s2,Int8)
close(s1)

在REPL中,可以查看open的用法,在open中,还可以调用函数

代码语言:javascript
复制
open(readline, "sdy.txt")

当然,也可以调用自定义的函数

代码语言:javascript
复制
readFunc(s::IOStream) = read(s, Char)
open(readFunc, "sdy.txt")

还可以像Python中的with open...as的用法一样打开文件

代码语言:javascript
复制
open("sdy.txt","r") do stream
    for line in eachline(stream)
        println(line)
    end
end

也可以将上述过程定义成函数再用open操作

代码语言:javascript
复制
function readFunc2(stream)
    for line in eachline(stream)
        println(line)
    end
end
open(readFunc2, "sdy.txt")

写文件操作

代码语言:javascript
复制
write("wrFile1.txt", "Hello World")
open("wrFile2.txt","w") do f
    for ch in 'a':'z'
        write(f, ch)
    end
    write(f,'\n')
end

open函数中的参数模式定义如下

Mode

Description

r

read

w

write, create, truncate

a

write, create, append

r+

read, write

w+

read, write, create, truncate

a+

read, write, create, append

代码语言:javascript
复制
io = open("wrFile3.txt","w")
write(io, "Write File...\n")

但这种读写文件的方式对矩阵操作支持不太好

代码语言:javascript
复制
mat = reshape(1:9, (3,3))
write("mat.txt", mat)

最好使用DelimitedFiles包进行矩阵的读写操作

代码语言:javascript
复制
using DelimitedFiles
m = reshape(1:9, (3,3))
writedlm("number.txt", m, '\t')

cont = readdlm("number.txt")

除了txt格式外,Julia还可以对csv等格式,但Julia自带的数据序列化工具JLD2速度速度更快,扩平台,重点推荐。

csv文件

写csv文件与操作普通文件类似,中间加个逗号就可以了。

代码语言:javascript
复制
using DelimitedFiles
data = rand(Int8,10,5)
writedlm("file1.csv", data, ',')

读文件时,我们可以使用DataFrames来读csv文件。 关于DataFrames我们将在科学计算一节中讲到。

代码语言:javascript
复制
using DataFrames
df = readtable("file1.csv")

也可以使用CSV package自带的函数读取

代码语言:javascript
复制
using CSV
df1 = CSV.read("file1.csv")

用CSV.read()读上来的数据也是DataFrame格式。

JLD2

JLD2是JLD格式的改进,也是一种HDF5格式。

写文件

代码语言:javascript
复制
using JLD2
stri = "hello world"
fid = jldopen("jld_test.jld2","w")
write(fid, "stri", stri)
close(fid)

读文件

代码语言:javascript
复制
fid = jldopen("jld_test.jld2","r")
res = read(fid,"ss")

IOBuffer

相当于在内存中创建一个IOStream

代码语言:javascript
复制
io = IOBuffer()
write(io, "Hello World!", " JuliaLang is great!")

采用take!的方式将内容从IOBuffer中读出

代码语言:javascript
复制
String(take!(io))

如果在创建IOBuffer时就指定了里面的内容,则词IOBuffer为只读的。

代码语言:javascript
复制
io = IOBuffer("Hello World!")
write(io, "This is not writable.")
read(io, String)

关闭IOBuffer

代码语言:javascript
复制
close(io)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 傅里叶的猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IO操作
    • 读文件操作
      • 写文件操作
        • csv文件
          • JLD2
            • IOBuffer
            相关产品与服务
            文件存储
            文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档