1

私は巨大なコードを書いていますが、それを実行するために必要な小さなことの1つは、異なる行に分割されたテキストファイルを調べることです。行が空になるたびに新しい行のリストを作成するために必要です。たとえば、テキストが次の場合:(各番号は改行です)

1 2 3 4

5 6 3

1 2

[1,2,3,4]、[5,6,3]、[1,2]の3つの異なるリストを作成する必要があります

これはこれまでの私のコードです(始めたばかりです):

    new_list=[]
    my_list=[]
    doc=open(filename, "r")
    for line in doc:
            line=line.rstrip()
            if line !="":
                    new_list.append(line)
    return new_list
4

2 に答える 2

3

OK、これでうまくいくはずです:

initial_list, temp_list = [], []
for line in open(filename):
    if line.strip() == '':
        initial_list.append(temp_list)
        temp_list = []
    else: temp_list.append(line.strip())
if len(temp_list) > 0: initial_list.append(temp_list)
final_list = [item for item in initial_list if len(item) > 0]
print final_list
于 2012-12-19T19:15:05.997 に答える
2

あなたは次のようなことをすることができます:

[x.split() for x in fileobject if x.strip()]

整数を取得するには、次を使用できますmap

[map(int,x.split()) for x in fileobject if x.strip()]

ここfileobjectで、はによって返されるオブジェクトopenです。これは、コンテキストマネージャーで行うのがおそらく最善です。

with open(filename) as fileobject:
     data_list = [map(int,x.split()) for x in fileobject if x.strip()]

他の投稿のコメントを読んで、私もあなたの質問をきちんと理解していなかったようです。これが私の修正です:

with open(filename) as fileobject:
    current = []
    result = [current]
    for line in fileobject:
        if line.strip(): #Non-blank line -- Extend current working list.
            current.extend(map(int,line.split()))
        else:  #blank line -- Start new list to work with
            current = []
            result.append(current)

これで、結果のリストがに含まれるはずresultです。

于 2012-12-19T19:14:57.253 に答える