私は数字で構成されるテーブルを含むテキストファイルを持っています:
5 10 6
6 20 1
7 30 4
8 40 3
9 23 1
4 13 6
たとえば、2番目の列にのみ数字を含める場合、その列をリストに抽出するにはどうすればよいですか?
_f=open(file,"r")
lines=f.readlines()
result=[]
for x in lines:
result.append(x.split(' ')[1])
f.close()
_
リスト内包表記を使用しても同じことができます
_print [x.split(' ')[1] for x in open(file).readlines()]
_
split()
のドキュメント
string.split(s[, sep[, maxsplit]])
文字列
s
の単語のリストを返します。オプションの2番目の引数sepが存在しないかNoneの場合、単語は空白文字の任意の文字列(スペース、タブ、改行、リターン、フォームフィード)で区切られます。 2番目の引数sepが存在し、Noneではない場合、Wordセパレータとして使用される文字列を指定します。返されるリストには、文字列内のセパレータの重複しない出現数よりも1つ多くの項目があります。
したがって、使用したスペースを省略してx.split()
だけを実行できますが、これはタブと改行も削除することに注意してください。
スペースで区切られたファイルがあるため、区切られた値のファイルを読み取るために設計されたモジュール csv
を使用します。
_import csv
with open('path/to/file.txt') as inf:
reader = csv.reader(inf, delimiter=" ")
second_col = list(Zip(*reader))[1]
# In Python2, you can omit the `list(...)` cast
_
Zip(*iterable)
パターンは、行を列に、またはその逆に変換するのに役立ちます。ファイルを行ごとに読んでいる場合...
_>>> testdata = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
>>> for line in testdata:
... print(line)
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
_
...しかし、列が必要な場合、各行をZip
関数に渡すことができます
_>>> testdata_columns = Zip(*testdata)
# this is equivalent to Zip([1,2,3], [4,5,6], [7,8,9])
>>> for line in testdata_columns:
... print(line)
[1, 4, 7]
[2, 5, 8]
[3, 6, 9]
_
リスト内包表記でZip
関数を使用できます:
with open('ex.txt') as f:
print Zip(*[line.split() for line in f])[1]
結果:
('10', '20', '30', '40', '23', '13')
これは古い質問ですが、データが配列のように見える場合、numpyの loadtxt が役立つと誰も言及していません。
>>> import numpy as np
>>> np.loadtxt("myfile.txt")[:, 1]
array([10., 20., 30., 40., 23., 13.])
まずファイルを開き、datafile
として.read()
メソッドを適用してファイルの内容を読み取り、次にデータを分割して次のような結果を返します:['5', '10', '6', '6', '20', '1', '7', '30', '4', '8', '40', '3', '9', '23', '1', '4', '13', '6']
そして、このリストにリストスライスを適用して、インデックス位置1の要素から開始し、ループの最後に到達するまで次の3つの要素をスキップします。
with open("sample.txt", "r") as datafile:
print datafile.read().split()[1::3]
出力:
['10', '20', '30', '40', '23', '13']
役立つかもしれません:
import csv
with open('csv_file','r') as f:
# Printing Specific Part of CSV_file
# Printing last line of second column
lines = list(csv.reader(f, delimiter = ' ', skipinitialspace = True))
print(lines[-1][1])
# For printing a range of rows except 10 last rows of second column
for i in range(len(lines)-10):
print(lines[i][1])