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

5
为什么这些之间存在差异?
# 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)

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

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

text.txt是这样的:

hello World
yay

正如您所看到的,输出结果是不同的。我该如何使Julia的行为类似于Python的?还有其他在Julia中读取文件的方式吗?

3个回答

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)

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


7

这是一个更加Julian式的版本,使用了用户user17558100的keep=true建议进行了更正:

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

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


2
如果您希望逐个字符读取,应该使用readeach,例如:
f = open("./text.txt", "r")
for l in readeach(f, Char)
     println(l == '\n', " : ", l)
end

false : h
false : e
false : l
false : l
false : o
false :  
false : w
false : o
false : r
false : l
false : d
true : 

false : y
false : a
false : y

顺便提一下,这不是一种高效的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接