我有一个特定的文件,我想将其用于另一个文本文件,但它给了我索引错误。文件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 行的文件。
只有这个新的尝试才能在一定程度上解决我的问题。
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)