将每个矩阵分开成单独的文件

file.csv 存储了 n 个矩阵。例如,

   A  B  C
A  0  3  4
B  5  0  7
C  7  8  0

   A  B  C  D
A  0  3  4  5
B  5  0  7  9
C  7  8  0  5
D  7  8  6  0

所有的矩阵之间用一个空行分隔。

我想将每个单独的矩阵分别存储为一个单独的文件(1.csv,2.csv...n.csv)。请帮帮我。谢谢。

点赞
用户3735873
用户3735873

以下是一种可能的方式。只有数据部分保存在 CSV 中。如果您需要头部,您需要在 save_csv() 中添加一些代码。data 字符串中的示例数据。您可以通过将任何您喜欢的文件加载到其中来初始化 data

data = [[

   A  B  C
A  0  3  4
B  5  0  7
C  7  8  0

   A  B  C  D
A  0  3  4  5
B  5  0  7  9
C  7  8  0  5
D  7  8  6  0

]]

--------------------------------------------------------------------------------
-- table.concat 函数的变量
local cc = table.concat
--------------------------------------------------------------------------------
-- 保存 CSV 的函数
function save_csv(filenumber,t)
  io.open(filenumber .. '.csv','w'):write(cc(t,'\n')):close()
end
--------------------------------------------------------------------------------
-- 文件号和答案变量的初始化
local filenumber = 1
local ans = {}

-- 逐行处理数据
for line in (data..'\n'):gmatch '(.-)\n' do
  local s = {}
  for item in line:gmatch '%d+' do s[#s+1] = item end
  if #s > 0 then
    ans[#ans+1] = cc(s,',')
  elseif #ans > 0 then
    save_csv(filenumber,ans)
    filenumber = filenumber + 1
    ans = {}
  end
end
2019-05-02 17:12:23
用户10126088
用户10126088

因此,这应该恰好做到你想要的。

快速而肮脏

-- 读取每行
local files, data = {}
for line in io.lines'file.csv'do
  if(line == ''then
    if data then table.insert(files, data) end
    data = nil
  else
    data =(data and(data .. '\n'or'').. line
  end
end

-- 最后一个文件
如果数据则插入文件

-- 写入文件
for i = 1,#files do
  local f = io.open(i ..'.csv''w')
  f:write(files [i])
  io.close(f)
end
2019-05-03 07:33:04