Hướng dẫn how to add column in text file in python - cách thêm cột vào file text trong python

Tôi đã tìm kiếm trong trang web nhưng không tìm thấy bất cứ điều gì cụ thể cho trường hợp của tôi. Tôi có một mã tạo một mảng từ một tệp văn bản và tôi chỉ muốn tạo một tệp mới như đầu vào, nhưng với mảng mới được thêm vào một cột ở bên phải. Làm thế nào tôi có thể làm được?

Ví dụ về tệp đầu vào:

4.00171 2.04336E14 14.31034 0.65049
2.56491 6.89220E13 13.83835 1.05022
1.95019 3.45559E13 13.53852 1.38901

Một phần của mã tạo ra một mảng:

import numpy as np

dataset = np.genfromtxt[fname='input.dat'] 
s=dataset[:,3]
d=1.686/s

Và tôi chỉ muốn thêm mảng D vào một cột ở bên phải của tệp đầu vào và lưu tất cả trong một tệp đầu ra mới. [Tôi đang sử dụng Python 2.7].

Khi được hỏi ngày 29 tháng 8 năm 2017 lúc 11:12Aug 29, 2017 at 11:12

Alessandro Pecaalessandro PecaAlessandro Peca

8411 Huy hiệu vàng14 Huy hiệu bạc39 Huy hiệu đồng1 gold badge14 silver badges39 bronze badges

Với các chức năng 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 Nội dung sẽ giống như:

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

Đã trả lời ngày 29 tháng 8 năm 2017 lúc 11:47Aug 29, 2017 at 11:47

RomanperekhrestromanperkhrestRomanPerekhrest

77.1k4 Huy hiệu vàng53 Huy hiệu bạc95 Huy hiệu Đồng4 gold badges53 silver badges95 bronze badges

4

Tại sao không làm

import numpy as np

dataset = np.genfromtxt[fname='input.dat'] 
s=dataset[:,3]
d=1.686/s
0 dọc theo trục thích hợp?

Vấn đề là các biến của bạn

import numpy as np

dataset = np.genfromtxt[fname='input.dat'] 
s=dataset[:,3]
d=1.686/s
1 và
import numpy as np

dataset = np.genfromtxt[fname='input.dat'] 
s=dataset[:,3]
d=1.686/s
2 đều có hình dạng
import numpy as np

dataset = np.genfromtxt[fname='input.dat'] 
s=dataset[:,3]
d=1.686/s
3 và do đó là một vectơ nhiều hơn một mảng. Sau đây giải quyết vấn đề:

s=dataset[:,3]
d=1.686/s
d=d[:,None]
output = np.concatenate[[dataset,d], axis=1]

Bây giờ bạn chỉ cần nhập dữ liệu của mình trở lại vào một tệp và bạn đã hoàn thành ...

import numpy as np

dataset = np.genfromtxt[fname='input.dat'] 
s=dataset[:,3]
d=1.686/s
4

Đã trả lời ngày 29 tháng 8 năm 2017 lúc 11:37Aug 29, 2017 at 11:37

2

Đọc tệp vào một mảng các dòng bằng cách chia trên ký tự dòng mới. Vòng lặp qua các dòng. Sau khi viết từng dòng vào tệp mới, hãy nối phần tử tiếp theo của mảng "D" của bạn [cộng với một dòng mới].

Đã trả lời ngày 29 tháng 8 năm 2017 lúc 11:23Aug 29, 2017 at 11:23

MikemikeMike

6022 Huy hiệu vàng7 Huy hiệu bạc17 Huy hiệu đồng2 gold badges7 silver badges17 bronze badges

Để mở một tệp và lưu nó như một tệp khác, bạn nên sử dụng

import numpy as np

dataset = np.genfromtxt[fname='input.dat'] 
s=dataset[:,3]
d=1.686/s
5.

Thử cái này:

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]

Nếu bạn muốn một cách tốt để thao tác dữ liệu của mình, tôi sẽ đề nghị sử dụng thư viện Pandas

Một ví dụ đầy đủ bằng cách sử dụng

import numpy as np

dataset = np.genfromtxt[fname='input.dat'] 
s=dataset[:,3]
d=1.686/s
6:

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=' ']   

Đã trả lời ngày 29 tháng 8 năm 2017 lúc 11:21Aug 29, 2017 at 11:21

EduardoeduardoEduardo

6111 Huy hiệu vàng11 Huy hiệu bạc25 Huy hiệu đồng1 gold badge11 silver badges25 bronze badges

2

Bài Viết Liên Quan

Chủ Đề