次の形式のテキスト ファイルがあります。
a,b,c,d,
1,1,2,3,
4,5,6,7,
1,2,5,7,
6,9,8,5,
次の出力を取得するために、効率的にリストに読み込むにはどうすればよいですか?
list=[[1,4,1,6],[1,5,2,9],[2,6,5,8],[3,7,7,5]]
次の形式のテキスト ファイルがあります。
a,b,c,d,
1,1,2,3,
4,5,6,7,
1,2,5,7,
6,9,8,5,
次の出力を取得するために、効率的にリストに読み込むにはどうすればよいですか?
list=[[1,4,1,6],[1,5,2,9],[2,6,5,8],[3,7,7,5]]
ファイルの名前が次のようになっているとしますspam.txt
。
$ cat spam.txt
a,b,c,d,
1,1,2,3,
4,5,6,7,
1,2,5,7,
6,9,8,5,
リスト内包表記とzip()組み込み関数を使用すると、次のようなプログラムを作成できます。
>>> with open('spam.txt', 'r') as file:
... file.readline() # skip the first line
... rows = [[int(x) for x in line.split(',')[:-1]] for line in file]
... cols = [list(col) for col in zip(*rows)]
...
'a,b,c,d,\n'
>>> rows
[[1, 1, 2, 3], [4, 5, 6, 7], [1, 2, 5, 7], [6, 9, 8, 5]]
>>> cols
[[1, 4, 1, 6], [1, 5, 2, 9], [2, 6, 5, 8], [3, 7, 7, 5]]
さらに、引数リストのアンパックzip(*rows)
に基づいています。これは、リストまたはタプルをアンパックして、その要素を個別の位置引数として関数に渡すことができるようにします。つまり、に縮小されます。zip(*rows)
zip([1, 1, 2, 3], [4, 5, 6, 7], [1, 2, 5, 7], [6, 9, 8, 5])
編集:
これは、参照用の NumPy に基づくバージョンです。
>>> import numpy as np
>>> with open('spam.txt', 'r') as file:
... ncols = len(file.readline().split(',')) - 1
... data = np.fromiter((int(v) for line in file for v in line.split(',')[:-1]), int, count=-1)
... cols = data.reshape(data.size / ncols, ncols).transpose()
...
>>> cols
array([[1, 4, 1, 6],
[1, 5, 2, 9],
[2, 6, 5, 8],
[3, 7, 7, 5]])
次のコードを試すことができます。
from numpy import*
x0 = []
for line in file('yourfile.txt'):
line = line.split()
x = line[1]
x0.append(x)
for i in range(len(x0)):
print x0[i]
ここでは、最初の列が x0[] に追加されます。同様の方法で他の列を追加できます。
data_py パッケージを使用して、ファイルから列単位のデータを読み取ることができます。を使用してこのパッケージをインストールします
pip install data-py==0.0.1
from data_py import datafile
df1=datafile("C:/Folder/SubFolder/data-file-name.txt")
df1.separator=","
[Col1,Col2,Col3,Col4,Col5]=["","","","",""]
[Col1,Col2,Col3,Col4,Col5]=df1.read([Col1,Col2,Col3,Col4,Col5],lineNumber)
print(Col1,Col2,Col3,Col4,Col5)
詳細については、リンクをたどってくださいhttps://www.respt.in/p/python-package-datapy.html