Edited at

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

More than 1 year has passed since last update.


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

私は外出先でもプログラミングを勉強したい派ですが、モバイルルーターは持っていないし、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変数を追加しました。