如何像 Python 一样在 Julia 中读取文件

poo*_*oky 5 python file file-read julia

为什么这些之间有区别?:

# Python
f = open("./text.txt", "r")
for i in f.readlines():
   for l in i:
      print(print(l == "\n", ":", l))
f.close()
# -----------------------------

# Julia
f = open("./text.txt", "r")
while !eof(f)
    for l in readline(file)
        println(l == '\n', " : ", l)
    end
end
close(f)
Run Code Online (Sandbox Code Playgroud)

Python 输出如下:

False : h
False : e
False : l
False : l
False : o
False :  
False : W
False : o
False : r
False : l
False : d
True : 
                     <--- yep, it is as expected
False : y
False : a
False : y
Run Code Online (Sandbox Code Playgroud)

Julia 输出如下:

false : h
false : e
false : l
false : l
false : o
false :         <--- is this not a \n??
false : W
false : o
false : r
false : l
false : d
false : y
false : a
false : y
Run Code Online (Sandbox Code Playgroud)

text.txt这是:

hello World
yay
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,输出是不同的。我怎样才能让 Julia 的行为像 Python 一样?在 Julia 中还有其他读取文件的方法吗?

bic*_*nna 7

你可以这样做:

# Julia
f = open("./text.txt", "r")
while !eof(f)
    for l in readline(file, keep=true)
        println(l == '\n', " : ", l)
    end
end
close(f)
Run Code Online (Sandbox Code Playgroud)

默认情况下,它会丢弃\n's,但您可以通过添加 来保留它们keep=true


小智 7

keep=true这是使用user17558100 的建议的更加朱利安(和更正的)版本:

open("./text.txt", "r") do f
    for l in readlines(f, keep=true)
        foreach(c->println(c == '\n', " : ",c), l)
    end
end
Run Code Online (Sandbox Code Playgroud)

do格式与 Python 的语句相同with,这确保文件在没有显式close()调用的情况下关闭。