0

データファイルが次のもので構成されていると仮定して、データファイル内のテキストを分割するのに問題があります。

Row 1
apple
bob
cat
dog
ear
fun

Row 2
glow
horse
idea
joke
kick
lemon

Row 3
money
new
odd
park
queen
run

次のようなネストされたリストになるように分割したいと思います。

[[apple, bob], [cat, dog], [ear, fun]], 
[[glow, horse], [idea, joke], [kick, lemon]], 
[[money, new], [odd, park], [queen, run]]

これはこれまでの私の仕事です:

def text_file(data_file):
    nested_list = []
    main_list = []
    my_list = ''
    for index in data_file:
        index = index.strip()

        if (index in my_list):
            main_list.append(nested_list)
            nested_list = []

        else:
            nested_list.append(index)

    if (nested_list):
        main_list.append(nested_list)

    return (main_list)

しかし、これは戻ります:

text_file(open("data_file.txt", "r"))
[['Row 1', 'apple', 'bob', 'cat', 'dog', 'ear', 'fun'], 
['Row 2', 'glow', 'horse', 'idea', 'joke', 'kick', 'lemon'], 
['Row 3', 'money', 'new', 'odd', 'park', 'queen', 'run']]

何もインポートせずに、どうすればこれを達成できますか?可能であれば、コードに何を追加できますか?

4

3 に答える 3

5

あなたがする必要が\n\nあるのは、あなたにグループを与える(2つの改行)でファイルを分割し、次にその結果を行で分割し、そしてzipあなたの必要なリストを構築するためにファイルを適切にステップオーバーするために使用することです。

s = """Row 1
apple
bob
cat
dog
ear
fun

Row 2
glow
horse
idea
joke
kick
lemon

Row 3
money
new
odd
park
queen
run"""

lines = s.split('\n\n')
for line in lines:
    words = line.splitlines()
    print([ [i, j] for i, j in zip(words[1::2], words[2::2]) ])

[['apple', 'bob'], ['cat', 'dog'], ['ear', 'fun']]
[['glow', 'horse'], ['idea', 'joke'], ['kick', 'lemon']]
[['money', 'new'], ['odd', 'park'], ['queen', 'run']]
于 2012-11-30T07:59:57.907 に答える
1

とを使用して、このようなregexものiterators

regexでsplitを使用すると、またはをRow number使用して期待される出力を取得できます。zipiterator

In [8]: with open("data.txt") as f:
    spl=re.split(r"Row \d+",f.read())[1:]
    for x in spl:
        sp=x.split()
        it=iter(sp)
        print ([[next(it),next(it)] for _ in range(len(sp)//2)])
   ...:         
[['apple', 'bob'], ['cat', 'dog'], ['ear', 'fun']]
[['glow', 'horse'], ['idea', 'joke'], ['kick', 'lemon']]
[['money', 'new'], ['odd', 'park'], ['queen', 'run']]
于 2012-11-30T08:04:39.003 に答える
0
if (nested_list):
    new_list = nested_list[1:]
    main_list.append(zip(new_list[::2], new_list[1::2]))

これを試してみてください

上記のコードは、メインリストにネストされたリストを追加する代わりに、最初に連続する要素のペアを形成し、次にそれを追加します。

于 2012-11-30T07:59:10.820 に答える