如何在不知道大小的情况下缩放行?

问题描述 投票:0回答:1

我有一个特定的文件,我想将其用于另一个文本文件,但它给了我索引错误。文件matrix2.txt 有(1:8、2:13、3:15、4:6 等)。我想删除最小行 (4:6) 右侧的所有值,使其共有 6 个元素。在这个方块之后,我想将其分成具有相同大小的较小文件。

是否有一种修剪方法,无论之前的文件大小如何,也可以提供新文件?不用手动添加48、6、101?

import os
import numpy as np
def split_file(file_path, output_dir, num_files, lines_per_file, floats_per_line):
  with open(file_path, "r") as f:
    data = f.readlines()
  if not os.path.exists(output_dir):
    os.makedirs(output_dir)
  matrices = []
  for i in range(0, len(data), lines_per_file):
    matrix = np.array([[int(item) for item in line.split()] for line in data[i:i + lines_per_file]])
    matrices.append(matrix)
  for i in range(num_files):
    output_file_path = os.path.join(output_dir, f"m{i}.txt")
    with open(output_file_path, "w") as f:
      for j in range(lines_per_file):
        for k in range(floats_per_line):
          f.write(str(matrices[i][j][k]))
          if k < floats_per_line - 1:
            f.write(" ")
        f.write("\n")
if __name__ == '__main__':
  file_path, output_dir = "matrix.txt", "mi"
  num_files, lines_per, floats_per = 48, 6, 101 
  split_file(file_path, output_dir, num_files, lines_per, floats_per) 

这给出了最低行范围: awk '{if (NR==2) print $0}' foo.txt |厕所-w

我不记得以前的尝试,但其中一次结果被零除。为了简单起见,38 个元素应该是 6 个文件,最后一个元素在下一行有 2 个。按照相同的逻辑,76 个元素应该是 6 个 2 行的文件。

python matrix scalability adjacency-matrix
1个回答
0
投票

只有这个新的尝试才能在一定程度上解决我的问题。

import os, shutil
def chunk_file(input_file, num_chunks, chunk_size):
    output_folder = os.path.splitext(input_file)[0]
    os.makedirs(output_folder, exist_ok=True)
    with open(input_file, 'r') as f:
        text = f.read()
    chunks = []
    for i in range(0, len(text), chunk_size * 16):
        chunks.append(text[i:i + chunk_size * 16])
    chunk_index = 0
    for chunk in chunks:
        output_file = os.path.join(output_folder, f"v{chunk_index:0}.txt")
        with open(output_file, 'w') as f:
            f.write(chunk)
        chunk_index += 1
if __name__ == "__main__":
    input_file = "matrix2.txt"
    num_chunks = 12
    chunk_size = 279
    chunk_file(input_file, num_chunks, chunk_size)
© www.soinside.com 2019 - 2024. All rights reserved.