在文本文件中添加新列

时间:2017-08-29 11:12:25

标签: python numpy

我已经在网站上搜索过但没有找到任何针对我案例的内容。 我有一个代码,从文本文件创建一个数组,我只想创建一个新的文件,如输入一个,但新的数组添加在右侧的列中。我该怎么办?

输入文件示例:

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)。

4 个答案:

答案 0 :(得分:1)

为什么不在正确的轴上做concatenate

问题在于,您的变量ds都具有(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.appendnumpy.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"的下一个元素。数组(加上换行符)。