4
5

More than 1 year has passed since last update.

【Python】箇条書きを表形式に変換する【ありがとうChatGPT】

Posted at

できること(入力例と出力例)

  • 箇条書きのテキストを表形式に変換する
    • 今回の例だと、1列の箇条書きを4列の表に変換
入力例
テキスト1行目
テキスト2行目
テキスト3行目
テキスト4行目
テキスト5行目
テキスト6行目
テキスト7行目
テキスト8行目
テキスト9行目
テキスト10行目
テキスト11行目
テキスト12行目
出力例
テキスト1行目|テキスト2行目|テキスト3行目|テキスト4行目
テキスト5行目|テキスト6行目|テキスト7行目|テキスト8行目
テキスト9行目|テキスト10行目|テキスト11行目|テキスト12行目

やり方(Pythonコード)

1列の箇条書きを4列の表に変換
# テキストを1行ずつ読み込む
with open('input.txt', 'r') as f:
    lines = f.readlines()

# バッファにためる行数を設定する
n = 4

# バッファの初期化
buffer = []

# テキストを4行ごとに区切ってパイプ記号で区切られた1行のテキストに変換する
for i, line in enumerate(lines):
    # バッファにテキストをためる
    buffer.append(line.strip())
    # バッファにためたテキストがn行になった場合には、パイプ記号で区切って1行のテキストに変換して出力する
    if len(buffer) == n:
        print('|'.join(buffer))
        # バッファを空にする
        buffer = []

# テキストの行数が4で割り切れない場合には、最後にためたバッファをパイプ記号で区切って1行のテキストに変換して出力する
if len(buffer) > 0:
    print('|'.join(buffer))

(参考)ここに至るまで(ChatGPTとの会話内容)

今回、ChatGPTくんが書いたコードがそのまま使えました。会話内容を紹介します。

まず最初に入力例と出力例を示し、どんな処理を行われているか言語化してもらいました。

ChatGPTへの質問
以下の入力例と出力例を参考に、行われている処理を解説してください。

#入力例
テキスト1行目
テキスト2行目
テキスト3行目
テキスト4行目
テキスト5行目
テキスト6行目
テキスト7行目
テキスト8行目
テキスト9行目
テキスト10行目
テキスト11行目
テキスト12行目

#出力例
テキスト1行目|テキスト2行目|テキスト3行目|テキスト4行目
テキスト5行目|テキスト6行目|テキスト7行目|テキスト8行目
テキスト9行目|テキスト10行目|テキスト11行目|テキスト12行目

#処理
ChatGPTからの回答
この処理は、複数行のテキストを与えられた場合に、4行ごとに区切ってパイプ記号(|)で区切られた1行のテキストを出力する処理です。

具体的には、与えられたテキストを1行ずつ読み込みながら、1行目から4行目までのテキストをバッファにためていきます。5行目以降のテキストが与えられた場合には、これまでためた4行のテキストをパイプ記号で区切って1行のテキストに変換し、出力します。そして、バッファを空にして、次の4行のテキストをためる準備をします。最後に、与えられたテキストが4行未満の場合には、最後にためたバッファをパイプ記号で区切って1行のテキストに変換し、出力します。

この処理を実装するためには、ループ文や条件文を使って、適切にテキストを読み込み、バッファにため、パイプ記号で区切った1行のテキストを出力する必要があります。また、テキストを1行ずつ読み込む方法や、文字列を区切る方法、条件文やループ文の使い方など、プログラミングの基礎知識が必要となります。

そのあとで、pythonコードで出力してもらいました。

ChatGPTへの質問
この処理を行うpythonのコードを出力してください
ChatGPTからの回答
以下は、与えられたテキストを4行ごとに区切ってパイプ記号で区切られた1行のテキストに変換するPythonコードの例です。

# テキストを1行ずつ読み込む
with open('input.txt', 'r') as f:
    lines = f.readlines()

# バッファにためる行数を設定する
n = 4

# バッファの初期化
buffer = []

# テキストを4行ごとに区切ってパイプ記号で区切られた1行のテキストに変換する
for i, line in enumerate(lines):
    # バッファにテキストをためる
    buffer.append(line.strip())
    # バッファにためたテキストがn行になった場合には、パイプ記号で区切って1行のテキストに変換して出力する
    if len(buffer) == n:
        print('|'.join(buffer))
        # バッファを空にする
        buffer = []

# テキストの行数が4で割り切れない場合には、最後にためたバッファをパイプ記号で区切って1行のテキストに変換して出力する
if len(buffer) > 0:
    print('|'.join(buffer))

このコードでは、まずopen()関数を使って、ファイルからテキストを読み込んでいます。次に、バッファにためる行数をnで設定し、バッファを初期化します。その後、enumerate()関数を使って、テキストを1行ずつ読み込みながら、バッファにテキストをためていきます。バッファにためたテキストがn行になった場合には、join()メソッドを使ってパイプ記号で区切って1行のテキストに変換し、print()関数で出力します。最後に、テキストの行数が4で割り切れない場合には、最後にためたバッファをパイプ記号で区切って1行のテキストに変換して出力します。

(参考)Python使ったことないよ!っていうあなた

Google Colaboratory使えば簡単なのでスーパーオススメです。

おわりに

今回、ググって良いやり方が出なかったので、ChatGPTに聞いてみたのですが、そもそもPython使わずExcelでも出来そうな気もする…
良いやり方をご存知の方、教えてください!

ちなみにChatGPTにExcelのやり方を教えてもらったんですが、なんかうまくいきませんでした。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5