[実際のコード付き by Python] Progateからダウンロードしたコードをkindleで読みたい!


外出先でもプログラミングやコードを学びたい

私は外出先でもプログラミングを勉強したい派ですが、モバイルルーターは持っていないし、PCを持ち歩く気力もありません。しかも長々とスマートフォンの画面を凝視するのはつらいです。

そこで思いついたのが、.txt形式でコードをKindleに送ってそれを閲覧
しかしProgateでダウンロードしたファイルはレッスンごとにわかれているため、ひとつのファイルにまとめるための手作業コピペの連続はきつい

なので以下を目論んでPythonでコードを書きました。2番をPythonに行ってもらいます。
1. Progateのコース終了時に自分が書いたコードを一括ダウンロード
2. ダウンロードしたコード (10~20程度の複数のファイルにわかれている) をすべてbash画面に表示。
3. kindleに送信
4. コード復習( ゚Д゚)ウマー

今回使ったモノ

  • Python (言語)
  • Cloud9 (開発環境)
  • Progateからダウンロードした複数のファイル (Rubyでも何でもお好きなものを用意しましょう ´∀`)っ[rb, py, js etc...])

Cloud9でPythonのプロジェクトを作ってプログラム開始!

  • プロジェクトを作ったらフォルダを作りまとめたいファイル (今回はJavaScript。フォルダ名: JavaScript2) をすべてプロジェクトに放り込む。page1_script.js...がProgateからダウンロードしたコード。

  • 新しいテキストファイル(ファイル名: Javascript2.txt)も準備する
  • 新しいPythonファイル (ファイル名: javascript_kindle.py) をプロジェクトの直下に置く

プログラム内容

コード内容は侍エンジニア塾の【Python入門】ファイルの読み込み方法をマスターしよう!に負うところが大きいです。ありがとうございます

bash画面への出力のみのコード

以下のコードは旧コード (bash画面への出力のみ、新しいテキストファイルにまるっと貼り付けなし) です。「Pythonに新しいテキストファイルにまるっと貼り付けまでしてほしい」という方は次の見出し「ファイル作成→貼り付けまでしてくれるコード」を使ってください

javascript_kindle.py
# -*- coding:utf-8 -*-
# bash画面への出力のみ、新しいテキストファイルにまるっと貼り付けなし
# https://qiita.com/Yukiya025/items/c80b143427ceaa343c22
# 別のファイルを操作したいときは変数filenameの中身 (_script.js) を変えればOK!
filename = "_script.js" 

# 対象ファイルはpage1_script.js~page17_script.jsの計17ファイル
# ただし変数iは0からのカウントなので、page17_script.jsは18番目の要素となる
# shiracamusさん、ありがとうございます!
for i in range(1, 18): # rangeの数字はfile数に応じて変更
    print("////////////////////////")
    print("// page" + str(i) + filename)
    # ファイルを"読み込みモード"で開く
    file_data = open("./JavaScript2/page" + str(i) + filename, "r")

    #テキスト全体をまとめて取得
    text = file_data.read()

    #取得したテキストを表示
    print text

    #開いたファイルを閉じる
    file_data.close()

上のコードを保存したらbashで $ python javascript_kindle.py と入力しエンターを押して実行します。


するとyukiya025:~/workspace $ python javascript_kindle.pyの下から「page1_script.js」から「page17_script.js」の内容がすべて表示されます。

ファイル作成→貼り付けまでしてくれるコード

こちら↓がまるっと空のテキストファイル作成→貼り付けまでしてくれるコードです やったあ KeisukeToyotaさん、ありがとうございます

javascript_kindle.py
# -*- coding:utf-8 -*-
# 上記は日本語をPythonで使うなら必須

# Python 2.7.6なのでinput()ではなくraw_input()を使う。
filename = raw_input('数字より後ろのファイル名を入力してください。「_script.js」など: ')
# そのうち自動で「_」から最後までの文字列を取得するコードを追加したい
import os
files = os.listdir('./JavaScript2')
filenum = len(files) + 1

# 一括でファイル出力ができるコードもKeisukeToyotaさんから教えてもらいました! ありがとうございます!
with open('./output.txt', 'w+') as f:       
    # shiracamusさん、ありがとうございます!
    for i in range(1, filenum):
        file_data = open('./JavaScript2/page' + str(i) + filename, 'r')
        f.write('////////////////////////\n//page' + str(i) + filename + '\n' + file_data.read() + '\n')

上のコードを保存したらbashで $ python javascript_kindle.py と入力しエンターを押して実行します。

するとプロジェクトフォルダ直下にoutput.txtファイルが作成され、中にすべてのコードがすべて入っています

あとは、kindleに送信すればOK。

すべてコピーして新しいテキストファイルにまるっと貼り付け もpythonでできるよ? という方もいるでしょうが、やり方調べてもよくわからなかったので見送りました
KeisukeToyotaさんがファイル出力までできるコードをこめんとしてくれました! ありがとうございます

アドバイス超歓迎です

今回のエラー集

変数iはクオテーションで囲まない

Traceback (most recent call last):
  File "javascript_kindle.py", line 5, in <module>
    file_data = open("./JavaScript2/page" + "i" + "_script.js", "r")
IOError: [Errno 2] No such file or directory: './JavaScript2/pagei_script.js'

数値を文字列で使うときはstr()で型変換!

Traceback (most recent call last):
  File "javascript_kindle.py", line 6, in <module>
    file_data = open("./JavaScript2/page" + i + "_script.js", "r")
TypeError: cannot concatenate 'str' and 'int' objects

file_data = open("./JavaScript2/page" + str(i) + "_script.js", "r") とする。

for文が0から開始

Traceback (most recent call last):
  File "javascript_kindle.py", line 6, in <module>
    file_data = open("./JavaScript2/page" + str(i) + "_script.js", "r")
IOError: [Errno 2] No such file or directory: './JavaScript2/page0_script.js'

for文の直下にi += 1を挿入して解決。
for i in range(1, 18): と修正。
shiracamusさん、ありがとうございます
→ファイル数に柔軟に対応できるようにfilenum変数を追加しました。