外出先でもプログラミングやコードを学びたい
私は外出先でもプログラミングを勉強したい派ですが、モバイルルーターは持っていないし、PCを持ち歩く気力もありません。しかも長々とスマートフォンの画面を凝視するのはつらいです。
そこで思いついたのが、.txt形式でコードをKindleに送ってそれを閲覧
。
しかしProgateでダウンロードしたファイルはレッスンごとにわかれているため、ひとつのファイルにまとめるための手作業コピペの連続はきつい
なので以下を目論んでPythonでコードを書きました。2番をPythonに行ってもらいます。
- Progateのコース終了時に自分が書いたコードを一括ダウンロード
- ダウンロードしたコード (10~20程度の複数のファイルにわかれている) をすべてbash画面に表示。
- kindleに送信
- コード復習( ゚Д゚)ウマー
今回使ったモノ
- 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に新しいテキストファイルにまるっと貼り付けまでしてほしい」という方は次の見出し「ファイル作成→貼り付けまでしてくれるコード
」を使ってください
# -*- 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さん、ありがとうございます
# -*- 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ファイルが作成され、中にすべてのコードがすべて入っています
すべてコピーして新しいテキストファイルにまるっと貼り付け も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変数を追加しました。