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

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

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

なので以下を目論んでPythonでコードを書きました。2番をPythonに行ってもらいます。
1. Progateのコース終了時に自分が書いたコードを一括ダウンロード
2. ダウンロードしたコード (10~20程度の複数のファイルにわかれている) をすべてbash画面に表示。
3. kindleに送信
4. コード復習( ﾟДﾟ)ｳﾏｰ
# :game_die:今回使ったモノ:game_die:
- Python (言語)
- Cloud9 (開発環境)
- Progateからダウンロードした複数のファイル (Rubyでも何でもお好きなものを用意しましょう ´∀｀)っ[rb, py, js etc...])

# :carousel_horse:Cloud9でPythonのプロジェクトを作ってプログラム開始!:carousel_horse:
![Tree.png](https://qiita-image-store.s3.amazonaws.com/0/171266/7785113f-f692-185f-683e-3a3dbb698906.png)

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

![JS2contents.png](https://qiita-image-store.s3.amazonaws.com/0/171266/a589dcfd-278f-7ca2-55c4-81eee0ea7f66.png)

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

## :tada:プログラム内容:tada:
コード内容は侍エンジニア塾の[【Python入門】ファイルの読み込み方法をマスターしよう！](https://www.sejuku.net/blog/60333#i)に負うところが大きいです。ありがとうございます:heart:
### :musical_note:bash画面への出力のみのコード:musical_note:
以下のコードは旧コード (bash画面への出力のみ、新しいテキストファイルにまるっと貼り付けなし) です。「Pythonに新しいテキストファイルにまるっと貼り付けまでしてほしい」という方は次の見出し「:sparkles:ファイル作成→貼り付けまでしてくれるコード:sparkles:」を使ってください:wink:

```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` と入力しエンターを押して実行します。

![bash.png](https://qiita-image-store.s3.amazonaws.com/0/171266/bf834fcc-50d2-7df7-2ab6-03268261321c.png)
すると`yukiya025:~/workspace $ python javascript_kindle.py`の下から「page1_script.js」から「page17_script.js」の内容がすべて表示されます。

### :sparkles:ファイル作成→貼り付けまでしてくれるコード:sparkles:
こちら↓がまるっと空のテキストファイル作成→貼り付けまでしてくれるコードです:satisfied: やったあ:sparkles: [KeisukeToyota](https://qiita.com/KeisukeToyota)さん、ありがとうございます:heartpulse:

```python: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ファイルが作成され、中にすべてのコードがすべて入っています:heart_eyes:
![output.png](https://qiita-image-store.s3.amazonaws.com/0/171266/7622f7ec-68f9-5ec8-db5f-3393b254799d.png)


![output_contents.png](https://qiita-image-store.s3.amazonaws.com/0/171266/febce394-15db-b4d5-c608-302f32bad1d9.png)

あとは、kindleに送信すればOK。
![kindle.png](https://qiita-image-store.s3.amazonaws.com/0/171266/8729e7df-5f22-e0e2-d8a3-dea1f8711947.png)


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

アドバイス超歓迎です:sparkles:

# :dragon:今回のエラー集:dragon:
## 変数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](https://qiita.com/shiracamus)さん、ありがとうございます:heart_eyes:
→ファイル数に柔軟に対応できるようにfilenum変数を追加しました。