📜  Julia 中的文件处理

📅  最后修改于: 2022-05-13 01:55:18.137000             🧑  作者: Mango

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)

readlines函数

我们可以使用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)

关闭文件