Scilab mgetl(或python readlines):如何读取文本文件中含有\r而不是\n的行

1 投票
1 回答
603 浏览
提问于 2025-04-18 07:22

我有一个文本文件,这个文件的换行符是用 \r 来表示,而不是用 \n。所以当我在 Scilab 中使用 mgetl() 或在 Python 中使用 readlines() 时,整个文件都会被读取。这个文件非常大,我想避免一次性读取整个文件。该怎么做呢?

有趣的是,当我尝试使用通用换行符支持,正如这篇文章推荐的那样,结果命令把所有的 '\r' 字符都转换成了 '\n',然后还是读取了所有的行!所以这个问题在 Scilab 和 Python 中对我来说都没有解决。我需要在这两种语言中都有解决方案! :/

请帮帮我..

1 个回答

0

在Scilab语言中,你可以这样使用mfscanf()这个函数:

cr = ascii(13);
txt = "abcdefgh" + cr + "ijkl" + cr + cr + "mnopq";
mputl(txt, "test.txt")

fid = mopen("test.txt", "r");
row = 0;
while row <> []
    row = mfscanf(fid, "%s\r")
end
mclose(fid)

这个函数会逐行读取,以/结尾的行,并且用\r来分隔:

-->     while row <> []
  >         row = mfscanf(fid, "%s\r")
  >     end
 row  = 
  "abcdefgh"
 row  = 
  "ijkl"
 row  = 
  "mnopq"
 row  = 
    []

需要注意的是,空行会被忽略(连续的ascii(13)会被“合并”在一起)。

撰写回答