Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Excelのリストから1行ずつ,連番テキストファイルに書き込みたい

解決したいこと

Excelのセル1行ずつ読み込み,各テキストファイルに書き込み,行数分のテキストファイルを作成したいと考えています.

参考コードとしてはこちらになります
https://gammasoft.jp/python-example/python-create-text-file-valid-users/

こちらのコードは,1つのテキストファイルにExcelの内容をすべて書き込んでいます.こちらを発展させて,Excel内のリスト1行ずつを各テキストファイルで作成したいです.

(例)
test_1.txt の中身に,Excelの1行目
test_2.txt の中身に,Excelの2行目
といったような形です.

ちなみに,下記に示すコードだと,すべてのテキストファイルにExcel1行目しか記載されずといった感じです....

該当するソースコード

import datetime
import openpyxl

for i in range(1,11):
    file_path = 'C:\\Users\\XXX\\Desktop\\Auto_test\\python\\file\\test_' + str(i) + '.txt'
    with open(file_path, 'w') as f:

        xlsx_file = "members.xlsx"
        text_file = file_path

id_list = []
now = datetime.datetime.now()

# エクセルブック
wb = openpyxl.load_workbook(xlsx_file, data_only=True)

# エクセルシート
ws = wb["Sheet1"]

# ヘッダーを除いて順番に読み込む
for row in ws.iter_rows(min_row=2):
    # 会員番号
    member_id = row[0].value
    # 氏名
    member_name = row[1].value
    # 有効期限
    expire_date = row[3].value

    id_list.append([member_id, member_name])

        # テキストファイル書き込み
    for i in range(1,11):
        file_path = 'C:\\Users\\XXX\\Desktop\\Auto_test\\python\\file\\test_' + str(i) + '.txt'
        with open(file_path, 'w') as f:
            for i in id_list:
                f.write(str(i[0]) + "," + i[1] + "\n")
                f.close()   

コード内の「#テキストファイル書き込み」
にありますwrite文に対して,どのように記述すれば,10個作製したテキストファイルにExcel内リスト1行ずつを各テキストファイルに出力できるかが分からないのです...
python独学で始め2週間ほどなりに色々調べてみましたが,ネットにはなかなか書いておらず,,どのような記述をすれば解決できるかご教示いただければ幸いです.

0

1Answer

「#テキストファイル書き込み」以降のインデントがずれているため、for rowループ中の処理として実行されているのではないでしょうか。

インデントを修正し以下のようにすれば所望の動作になると思います。

for i, id in enumerate(id_list):
   file_path = 'test_' + str(i+1) + '.txt'
   with open(file_path, 'w') as f:
      f.write(str(id[0]) + ',' + id[1] + '\n')

また、with openを使う場合、ファイルがなければ新規作成されるため、import openpyxl直後のfor文(file_pathを生成している箇所)は不要で、closeも自動で行われるため、最後のf.close()もなくてよいです。

0Like

Your answer might help someone💌