0

テキスト ファイルの各行を個別にインポートし、可能であれば要素を int に変換し、それらのオブジェクトをリストに追加するクラスを作成したいと考えています。

また、テキストファイルの行が6語以上の場合は、最初の2語をまとめてリストに残すようにしたいです。

たとえば、次のようなテキスト ファイルをインポートします。

Hi my age is 15 16
If you want 13 to add
Please use 0 to add to it

3つの別々のオブジェクトでリストを作成し、

[
    ['Hi', 'my', 'age' 'is', 15, 16], 
    ['If', 'you', 'want', 13, 'to', 'add'],
    ['Please use', 0, 'to', 'add', 'to', 'it',]
]

Python はまったくの初心者なので、助けていただければ幸いです。よろしくお願いします。

4

2 に答える 2

2

これは、小さなループ構成を使用して非常に簡単に実行できます。ループの一部としてファイルを開き、1 行ずつ読み取ることができます。上記で入力した「foo.txt」というテキスト ファイルがあるとします。

myList = []
for line in open('foo.txt'):
    l.append(line.rstrip().split(' ')

これにより、探しているリスト構造内にリストが作成されます。しかし、待ってください。Python は、この方法で読み取った値をString型として解析します。そのため、数値が読み込まれると、実際には、必要な int ではなく、文字列としてリストに入れられます。数値かどうかを判断するには、文字列に対してisdigit()メソッドを使用できます。

myList = []
for line in open('foo.txt'):
    temp = line.rstrip().split()
    toAdd = []
    for value in temp:
        if value.isdigit():
            toAdd.append( int(value) )
        else:
            toAdd.append(value)
    myList.append(toAdd)

これは、この問題を解決するための最善の方法ではありません。頭に浮かんだ最初の解決策にすぎません。考えてみれば、ループ全体をある種の LC 式として実行できる可能性があります。

また、最後の要件も満たしていませんが、難しいとは思いません。私が提供したものを改善することをお勧めします。Python ドキュメント ( http://docs.python.org/2/library/string.htmlおよびhttp://docs.python.org/ 2/library/stdtypes.html#typesseq )

于 2013-11-13T14:58:34.613 に答える
0
raw_data = open('textfile.txt', 'r')

lines = [ele.split() for ele in raw_data]

_list = []
_temp = []

for line in lines:
    for ele in line:
        try:
            _temp.append(int(ele.strip()))
        except:
            _temp.append(ele.strip())


    _list.append(_temp if (len(_temp) <= 6) else ["{0} {1}".format(_temp[0], _temp[1])]+_temp[2:])
    _temp = []

print _list

Output

[['Hi', 'my', 'age', 'is', 15, 16],
 ['If', 'you', 'want', 13, 'to', 'add'],
 ['Please use', 0, 'to', 'add', 'to', 'it']]
于 2013-11-13T15:02:12.370 に答える