我已经在网站上搜索过但没有找到任何针对我案例的内容。 我有一个代码,从文本文件创建一个数组,我只想创建一个新的文件,如输入一个,但新的数组添加在右侧的列中。我该怎么办?
输入文件示例:
4.00171 2.04336E14 14.31034 0.65049
2.56491 6.89220E13 13.83835 1.05022
1.95019 3.45559E13 13.53852 1.38901
创建数组的代码的一部分:
import numpy as np
dataset = np.genfromtxt(fname='input.dat')
s=dataset[:,3]
d=1.686/s
我只想将数组d添加到输入文件右侧的列中,并将所有数据保存在新的输出文件中。 (我使用的是python 2.7)。
答案 0 :(得分:1)
为什么不在正确的轴上做concatenate
?
问题在于,您的变量d
和s
都具有(3,)
形状,因此更多的是向量而不是数组。以下解决了这个问题:
s=dataset[:,3]
d=1.686/s
d=d[:,None]
output = np.concatenate((dataset,d), axis=1)
现在您只需将数据输出回文件即可...
np.savetxt('example.txt', output)
答案 1 :(得分:1)
使用numpy.append
和numpy.savetxt
函数:
dataset = np.genfromtxt('input.dat')
d = 1.686/dataset[:,3]
d = np.reshape(d, (dataset.shape[0],1)) # adjust dimension of the new array
result = np.append(dataset, d, 1) # append as last column
np.savetxt('output.txt', result, delimiter=" ", fmt="%s")
output.txt
内容如下:
4.00171 2.04336e+14 14.31034 0.65049 2.59189226583
2.56491 6.8922e+13 13.83835 1.05022 1.60537792082
1.95019 3.45559e+13 13.53852 1.38901 1.21381415541
答案 2 :(得分:0)
要打开文件并将其另存为另一个文件,您应该使用with open
。
试试这个:
import os
# dirpath is the path to your file
# file is the name of your file with extension
# Read the file and store it in a variable
with open(os.path.join(dirpath, file), 'r') as f:
filedata = f.read()
# Manipulate your filedata here
# Write the file out again to a new file
with open(os.path.join(dirpath, new_file), 'w') as f:
f.write(filedata)
如果您想要一种操作数据的好方法,我建议您使用Pandas library
使用Pandas
的完整示例:
import pandas as pd
import numpy as np
dirpath = r'C:\Users\eandrade_brp\Desktop'
file = 'input_example'
new_file = 'new.data'
dataset = np.genfromtxt(fname=os.path.join(dirpath, file))
s = dataset[:, 3]
d = 1.686 / s
df = pd.DataFrame(dataset) # Create DataFrame from matrix
df['4'] = d # Add new column
# Save it to a new file without head, index and with white space separator
df.to_csv(os.path.join(dirpath, new_file), header = False, index=False, sep=' ')
答案 3 :(得分:0)
通过拆分换行符来将文件读入一行数组。循环线。将每一行写入新文件后,附加" d"的下一个元素。数组(加上换行符)。