

ディレクトリ内にあるテキストファイルを読み込んで分かち書きし、それをEXCELに格納するプログラムを作成しています。  
実行すると、読み込んだ最後のデータのみが出力され、残りのデータが出力・格納されません。  
おそらくfor文で不具合が出ていると思い、試してみたのですがなかなかうまく行かず・・・  
なにか解決策があればご教示お願いいたします

[code]

    import openpyxl as op
    import os.path
    import urllib.request
    import pyautogui as pg
    import subprocess
    import time
    import glob
    from janome.tokenizer import Tokenizer
    
    def main():
    
        text_list = glob.glob('./*.txt')
        for text in text_list:
            for i in range(1,5):
                text = text.lstrip('.\\')
                #print(text)
                with open(text) as txt:
                    allf = txt.read()
    
                txt_base = allf.replace('\n','')
                txt_base = txt_base.replace('\r','')
                txt_base = ''.join(txt_base.split())
                #print(txt_base)
    
                t = Tokenizer()
                with open(str(text)+'_wakati'+'.txt','w') as fw:
                    for token in t.tokenize(txt_base,wakati = True):
                        fw.write(str(token))
                        fw.write('  ')
    
            with open(str(text)+'_wakati'+'.txt') as ow:
                wakati_data = ow.read()
                print(wakati_data)
                wb = op.load_workbook('hoge.xlsx')
                ws = wb.active
                ws['D'+str(i)].value = wakati_data
        wb.save('hoge.xlsx')
    
    
    
    if __name__ == '__main__':
        main()
    
[/code]


CC BY-SA 4.0
2018-08-02T05:46:53.450
47179
2018-08-03T00:34:37.110
29386
question
python python3
Excelに値を入力する際の問題


インデントの問題ではないでしょうか。xlsxファイルへの書き込みを行う部分は、変数`i`で回しているforループの内側にいる必要があるように思います。

[code]

    for text in text_list:
        for i in range(1,5):
        # 中略 #
            with open(str(text)+'_wakati'+'.txt') as ow:
                wakati_data = ow.read()
                print(wakati_data)
                wb = op.load_workbook('hoge.xlsx')
                ws = wb.active
                ws['D'+str(i)].value = wakati_data
                wb.save('hoge.xlsx')
    
[/code]

質問文の書き方だと、ループをすべて抜けてからxlsxファイルに書き込みを行っています。  
(二つ目の`for`ループとインデントレベルが揃ってしまっている)


CC BY-SA 4.0
2018-08-02T05:56:27.970
47180
2018-08-02T05:56:27.970
3060
47179
answer


質問の処理で一番問題なのは、`for i in
range(1,5):`とわけのわからない４回の繰り返しがあることです。Excelのセルの位置を決めるために`i`が必要なためと思われるので、とりあえず以下のように修正することで動作すると思います。他にも問題はあると思われますが、後は適当に修正してください。

[code]

    from pathlib import Path # 追加のみ
    
    def main():
        # 作成した *_wakati.txt をディレクトリに保存
        path = Path('./wakati')
        if not path.exists():
            path.mkdir()
    
        for text in Path('.').glob('*.txt'):
            with open(text) as txt:
                allf = txt.read()
    
                txt_base = allf.replace('\n','')
                txt_base = txt_base.replace('\r','')
                txt_base = ''.join(txt_base.split())
    
                t = Tokenizer()
                with open(path / (text.stem + '_wakati' + '.txt'), 'w') as fw:
                    for token in t.tokenize(txt_base,wakati = True):
                        fw.write(str(token))
                        fw.write('  ')
    
        # 保存した *_wakati.txt を取り出してExcelに書き込み    
        wb = op.Workbook()
        ws = wb.active
        i = 1
        for text in path.glob('*.txt'):
            with open(text) as ow:
                wakati_data = ow.read()
                ws['D'+str(i)].value = wakati_data
            i += 1
        wb.save('hoge.xlsx')
    
[/code]


CC BY-SA 4.0
2018-08-03T00:09:07.050
47196
2018-08-03T00:34:37.110
2018-08-03T00:34:37.110
15171
15171
47179
answer