Python 如何用numpy数组替换部分文件
我有一个.msh文件,可以由文本阅读器打开和修改。我想用python打开它,然后用numpy数组替换一些特定的行,并将其另存为一个新的.msh文件。我的numpy数组有9列和数百行。我的文件也有数百行。我想用numpy数组替换文件中有9列的行。当然,numpy数组中的行数与文件中有9列的行数相同。为了简单起见,我在这里只显示了两行,但实际上我有数百行。 numpy阵列是:Python 如何用numpy数组替换部分文件,python,numpy,Python,Numpy,我有一个.msh文件,可以由文本阅读器打开和修改。我想用python打开它,然后用numpy数组替换一些特定的行,并将其另存为一个新的.msh文件。我的numpy数组有9列和数百行。我的文件也有数百行。我想用numpy数组替换文件中有9列的行。当然,numpy数组中的行数与文件中有9列的行数相同。为了简单起见,我在这里只显示了两行,但实际上我有数百行。 numpy阵列是: arr_1= np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9],
arr_1= np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9],
[-1, 0, 0, 1, 46, 2, -11, 0, 0]])
我的文件(my_文件)如下所示:
$MeshFormat
2.2 0 8
$EndMeshFormat
$Nodes
2929
1 26.66002035140991 0.75 1.25
-1 5 14 13.2 7.4444 11 9 -3 0.15
0.2 9 54.45 1 63 22.45 0 12 425.65
with open('my_file') as f:
for line in f:
new_data = line.split()
if len(new_data)==9:
for i in new_data:
for j in arr_1:
i = j
然后,我想获得一个新保存的文件,其新名称如下:
$MeshFormat
2.2 0 8
$EndMeshFormat
$Nodes
2929
1 26.66002035140991 0.75 1.25
1 2 3 4 5 6 7 8 9
-1 0 0 1 46 2 -11 0 0
我只能做到以下几点,但它不起作用:
with open('my_file') as f:
new_data= line.split() for line in f if len(line.split()) == 9
for i in new_data:
for j in arr_1:
i = j
我试过了,但一点也不成功。所以,我很感激任何暗示和帮助。
干杯
阿里尝试以下方法:
$MeshFormat
2.2 0 8
$EndMeshFormat
$Nodes
2929
1 26.66002035140991 0.75 1.25
-1 5 14 13.2 7.4444 11 9 -3 0.15
0.2 9 54.45 1 63 22.45 0 12 425.65
with open('my_file') as f:
for line in f:
new_data = line.split()
if len(new_data)==9:
for i in new_data:
for j in arr_1:
i = j
请尝试以下操作:
$MeshFormat
2.2 0 8
$EndMeshFormat
$Nodes
2929
1 26.66002035140991 0.75 1.25
-1 5 14 13.2 7.4444 11 9 -3 0.15
0.2 9 54.45 1 63 22.45 0 12 425.65
with open('my_file') as f:
for line in f:
new_data = line.split()
if len(new_data)==9:
for i in new_data:
for j in arr_1:
i = j
您可以尝试此代码,其中将写入名为
changed
的新文件。为了减少磁盘写入(以提高性能,特别是对于大型文件),将向新文件写入大量行
chunk_size = 3
buffer = ""
i = 0
# the index of lines with 9 digits
relavent_line = 0
with open('changed', 'a') as fout:
with open('original', 'r') as fin:
for line in fin:
if len(line.split()) == 9:
aux_string = ' '.join([str(num) for num in arr_1[relavent_line]])
buffer += '%s\n' % aux_string
relavent_line += 1
else:
buffer += line
i+=1
if i == chunk_size:
fout.write(buffer)
i=0
buffer = ""
# make sure all lines will be written to the output file
if buffer:
fout.write(buffer)
i=0
buffer = ""
您可以尝试此代码,其中将写入名为
changed
的新文件。为了减少磁盘写入(以提高性能,特别是对于大型文件),将向新文件写入大量行
chunk_size = 3
buffer = ""
i = 0
# the index of lines with 9 digits
relavent_line = 0
with open('changed', 'a') as fout:
with open('original', 'r') as fin:
for line in fin:
if len(line.split()) == 9:
aux_string = ' '.join([str(num) for num in arr_1[relavent_line]])
buffer += '%s\n' % aux_string
relavent_line += 1
else:
buffer += line
i+=1
if i == chunk_size:
fout.write(buffer)
i=0
buffer = ""
# make sure all lines will be written to the output file
if buffer:
fout.write(buffer)
i=0
buffer = ""
欢迎来到SO!请注意,添加一些解释通常可以改进答案。亲爱的@Mobi1968,我非常感谢您的解决方案。你知道我如何保存一个新文件吗?现在,它只运行一些for和if循环。事实上,我想将其另存为一个新的.msh文件。同时,我感谢任何更有效的解决方案。正如我所说,我的真实数据有数百行,甚至数千行,例如,我花了11分钟28秒来运行我的真实数据。欢迎使用SO!请注意,添加一些解释通常可以改进答案。亲爱的@Mobi1968,我非常感谢您的解决方案。你知道我如何保存一个新文件吗?现在,它只运行一些for和if循环。事实上,我想将其另存为一个新的.msh文件。同时,我感谢任何更有效的解决方案。正如我所说,我的真实数据有数百行,甚至数千行,例如,我花了11分钟28秒来运行我的真实数据。亲爱的@meTchaikovsky,你的解决方案太棒了。这正是我要找的。请注意,有没有办法嵌入for循环?比如说,我有一系列原始文件和一系列arr_1。我如何为他们制作一系列更改过的文件?亲爱的@meTchaikovsky,你的解决方案太棒了。这正是我要找的。请注意,有没有办法嵌入for循环?比如说,我有一系列原始文件和一系列arr_1。如何为他们制作一系列已更改的文件?