web-dev-qa-db-ja.com

Python:2つのリストを2列のテキストファイルに書き込む

2つのリストがあるとします。a= [1,2,3] b = [4,5,6]テキストファイルに書き込み、2列のテキストファイルを取得します。

1 4
2 5
3 6
18
Arthur Plante

リストを単にZipし、タブを区切り文字としてcsvファイルに書き込みます。

>>> a=[1,2,3]
>>> b=[4,5,6]
>>> Zip(a,b)
[(1, 4), (2, 5), (3, 6)]
>>> import csv
>>> with open('text.csv', 'w') as f:
...    writer = csv.writer(f, delimiter='\t')
...    writer.writerows(Zip(a,b))
...
>>> quit()
$ cat text.csv
1       4
2       5
3       6
21
Burhan Khalid

numpy.savetxt() を使用できます。これは、numpyライブラリの便利なツールです。最小限の例は次のとおりです。

import numpy as np

xarray = np.array([0,1,2,3,4,5])
yarray = np.array([0,10,20,30,40,50])
#here is your data, in two numpy arrays

data = np.array([xarray, yarray])
data = data.T
#here you transpose your data, so to have it in two columns

datafile_path = "/your/data/output/directory/datafile.txt"
with open(datafile_path, 'w+') as datafile_id:
#here you open the ascii file

    np.savetxt(datafile_id, data, fmt=['%d','%d'])
    #here the ascii file is written. 

Open()コマンドの「w +」の「+」は「存在しない場合に作成」を意味します

この例のnp.savetxt()のfmtフィールドは、数値が整数であることを指定しています。列ごとに異なる形式を使用できます。例えば。小数点以下2桁の浮動小数点形式を指定するには、'%.2f'を使用します。

15
Fabio

これを試して:

file = open("list.txt", "w")
for index in range(len(a)):
    file.write(str(a[index]) + " " + str(b[index]) + "\n")
file.close()

簡単な解決策は、固定幅のテキストの列を書くことです:

a=[1,2,3]
b=[4,5,6]

col_format = "{:<5}" * 2 + "\n"   # 2 left-justfied columns with 5 character width

with open("foo.csv", 'w') as of:
    for x in Zip(a, b):
        of.write(col_format.format(*x))

その後、cat foo.csvは以下を生成します。

1    4    
2    5    
3    6    

出力は人間と機械の両方で読み取り可能ですが、値の精度が列に沿って異なる場合、タブは乱雑な出力を生成できます。また、別個のcsvおよびnumpyライブラリーのロードも回避しますが、リストと配列の両方で機能します。

2
spinup

同じベクトルの長さを列に保存してスタックするために、直線を終了します。これを行うには、連結関数を使用して、タブで区切られた列に3,4またはN個のベクトルをスタックします。

np.savetxt('experimental_data_%s_%.1fa_%dp.txt'%(signal,angle,p_range), np.c_[DCS_exp, p_exp], delimiter="\t")
0

2つの列を含むテキストファイルに2つのリストを書き込むことができます。

a=[1,2,3]
b=[4,5,6] 
c = [a, b] 
with open("list1.txt", "w") as file:
    for x in Zip(*c):
        file.write("{0}\t{1}\n".format(*x))

テキストファイルでの出力:

1   4
2   5
3   6