65981


以下のようなテキストの奇数行(英語の部分)のみを取り出してそれぞれ、同じリストの別の要素として収めたいです。どのようにすればいいでしょうか。

[code]

    a double line
    二列
    a far cry from 
    ～とはほど遠い
    a walk of life
    職業
    abandon
    ～を捨てる
    ・・・
    ・・・
    ・・・
    
[/code]

[code]

    # -*- coding: utf-8 -*-
    import re
    
    source = 'english_words.txt'
    
    with open(source, "r", encoding="utf-8") as f:
        data = f.read()
    
    
    english_words = re.findall('[a-z]+', data)
    ja = re.findall('\n.*\n',data)
    
    jp_meanings = []
    for word in ja:
        m = re.sub('\n','',word)
        jp_meanings.append(m)
    
    words_dict = dict(zip(english_words,jp_meanings))
    
    print(jp_meanings)
    
[/code]

現在のコードはこんな感じです。re.findallでは熟語の空白で要素がかわってしまい、うまくいかなかったので、行ごとに読み込むことにしました。


CC BY-SA 4.0
2020-04-26T05:41:40.283
65979
2020-04-26T07:03:55.740
2020-04-26T07:03:55.740
3060
39563
question
python テキストファイル
Pythonでテキストから奇数行をリストにしたい


行毎に処理するだけなら正規表現は不要ですね。以下のようにできます。  
(ついでに前後の空白も削除しておきます。ちなみにsplitlines()は改行コード混在もOKです)

[code]

    # -*- coding: utf-8 -*-
    source = 'english_words.txt'
    
    with open(source, 'r', encoding='utf-8') as f:
        data = f.read().splitlines()
        english_words = [l.strip() for i, l in enumerate(data) if ((i%2) == 0)]
        jp_meanings = [l.strip() for i, l in enumerate(data) if ((i%2) != 0)]
    
    words_dict = dict(zip(english_words,jp_meanings))
    
    print(data)
    print(english_words)
    print(jp_meanings)
    print(words_dict)
    
[/code]


CC BY-SA 4.0
2020-04-26T06:21:23.523
65981
2020-04-26T06:41:09.913
2020-04-26T06:41:09.913
26370
26370
65979
answer


ファイルから奇数行だけ抽出する原始的な方法を示します。もっと華麗な方法があるのかもしれませんが。

[code]

    >>> file = open("c:\\temp\\test.txt","r")
    >>> number_of_line = 1
    >>> line = file.readline()
    >>> while line:
    ...     if number_of_line %2 == 1:
    　　　　　　★2で割って１余る場合に出力
    ...             print(line)
    ...     number_of_line += 1
    ...     line = file.readline()
    ...
    
[/code]


CC BY-SA 4.0
2020-04-26T06:22:59.577
65982
2020-04-26T06:22:59.577
10174
65979
answer


皆さんがいくつか回答しておられますが、私も作ってみたので、載せておきます。  
かなり原始的ですが、while分でループして追加しているだけです。  
少し追記した点として、改行コードが混在してもいいように、改行コードを統一しています。

[code]

    import re
    
    source = 'test.txt'
    with open(source, "r", encoding="utf-8") as f:
        data = f.read()
    data = re.sub(r'\r\n|\r|\n', '\n', data)
    array = data.split("\n")
    english_words = []
    jp_meanings = []
    i = 0
    while i < len(array):
        english_words.append(array[i])
        jp_meanings.append(array[i+1])
        i += 2
    words_dict = dict(zip(english_words,jp_meanings))
    print(words_dict)
    print(english_words)
    print(jp_meanings)
    
[/code]


CC BY-SA 4.0
2020-04-26T06:30:08.753
65984
2020-04-26T06:30:08.753
29034
65979
answer