Julia 中的文件处理
Julia 是一种高级、高性能和动态的编程语言,支持文件处理,即读取和写入文件。与其他各种语言相比,Julia 打开、读取和写入文件要容易得多。与Python相比,它具有类似的文件处理方式。它提供了多种语言的组合,例如 C(因其强大的性能)和Python(因其简单性)。由于 I/O 流主要用于数据科学和统计分析,Julia 提供了数据科学的所有功能。它在数值计算方面非常出色,并且还提供了对并行编程的支持。 Julia 提供了一些对垃圾收集的手动控制措施,它不会给用户带来分配和释放内存的细节负担。
创建文件
为了创建文件,我们首先使用pwd()
函数知道当前工作目录。如果要更改工作目录,请使用cd(path)并提供要创建文件的路径。
设置目录后,我们使用touch(filename)
函数来创建一个新文件。在此示例中,我们正在创建一个 .txt 文件。
# Creating a file using touch() function
touch("geek.txt")
在 Julia 中打开文件
创建文件后,我们使用 Julia 中的open(filename, mode)
函数打开文件。 open(filename, mode)有两个参数,一个是文件名,另一个是模式。由于我们只是在读取文件,因此我们只需要“r” (读取)模式即可打开文件。 open()
函数返回一个文件对象。
它具有各种其他模式,例如用于书写的“w”等,用于各种其他目的。
# The file "geek.txt" will be opened and
# open() will return a file object stored in f.
f = open("geek.txt", "r")
存在另一个open()
函数调用,我们可以避免在do语法的帮助下定义函数。这种语法有助于我们消除修改文件内容后关闭文件的歧义。 do 块还有助于轻松编写修改文件的代码。此外,它很容易实现。
# opening the file wrapped in do block
open("geek.txt") do file
# do something with file
end
在 Julia 中读取文件
为了读取文件的上下文,我们使用read()
函数读取文件的全部内容。
# The context of the file will be stored
# in the data variable as String
data = read(f, String)
根据我们的方便,有各种功能可以帮助阅读上下文。
我们可以使用eachline(filename)
函数,该函数用作迭代器,允许您一次处理文件的每一行。
# The eachline() function will print
# the context line by line
open("geek.txt") do file
for li in eachline(file)
println("$(li)")
end
end
我们还可以使用readlines()
将整个文件作为数组读取,每行一个元素:
# The readline() function to print the context as an array
f = open("geeks.txt", "r")
lines = readlines(f)
我们可以使用DelimitedFiles.readdlm()
函数读取以特定字符分隔的行,例如存储为文本文件、数据文件和表格的数组。格式为 readdlm(source; options...) 。行尾分隔符取为 \n。现在,如果所有数据本质上都是数字,则结果将是一个数字数组,如果某些元素无法解析为数字,则返回一个由数字和字符串组成的异构数组。
例如:在这个例子中,我们取两个数组x[]数组是一个 int 数组,而y[]是一个 char 数组。写完内容后,我们使用了 readlm()函数。
# importing DelimitedFiles
using DelimitedFiles
# x array
x = [4; 3; 2; 1];
#y -array
y = ["a"; "b"; "c"; "d"];
#Writing contents to the file
open("geek.txt", "w") do io
writedlm(io, [x y])
end;
#readlm() method to read the DelimitedFiles
readdlm("geek.txt")
在 Julia 中写入文件
为了写入文件,我们需要通过传递“w”作为参数以写入模式打开文件。现在要在 Julia 中写入文件,我们使用write(fileobject, string)
方法。它有两个参数,第一个是文件对象,第二个是提供的字符串。
最重要的一步是关闭文件 如果不关闭文件,文件的内容将是空的。这是因为 IOStream 必须在写入实际刷新到磁盘之前关闭。
# Opening file in write mode
f = open("geek.txt", "w")
# writing to a file using write() method
write(f, " Hello World")
# We need to close the file in order to write the content from the disk to file
close(f)
有时记住打开和关闭文件变得乏味,打开文件修改其内容并再次关闭它是非常常见的模式。因此,为了消除这种歧义,存在另一个 open 调用,它将函数作为第一个参数,文件名作为第二个参数。它非常有用,因为它打开文件,以文件作为参数调用函数,然后再次关闭它。
例如:如果你想让文件中的所有字母都大写,我们可以定义一个这样的函数:
# function to make contents of File in Uppercase
function make_upper(f::IOStream)
return uppercase(read(f, String))
end
# Now to call the function
open(make_upper, "geek.txt")
存在另一种open函数调用,我们可以避免在do语法的帮助下定义函数。
# Implementation of do syntax
# in order to avoid writing a function.
open("geek.txt") do f
uppercase(read(f, String))
end
我们还使用DelimitedFiles.writedlm()
函数写入文件。函数的通用参数由writedlm(f, A, delim='\t'; opts) 给出。
这里 A(向量、矩阵或可迭代行的可迭代集合)作为文本到 f(文件名字符串或 IO 流)使用给定的分隔符 delim(默认为制表符,但可以是任何可打印的 Julia 对象,通常一个字符或抽象字符串)。
下面是以下实现:
# importing DelimitedFIles
using DelimitedFiles
# x array
x = [4; 3; 2; 1];
# y array
y = ["a"; "b"; "c"; "d"];
# writedlm)() method
open("geek.txt", "w") do io
writedlm(io, [x y])
end;
在 Julia 中关闭文件
为了在 Julia 中关闭文件,我们可以简单地使用close(fileobject)
函数。它将文件对象作为参数并关闭连接。
# The close() function to close the file
close(f)