言語処理100本ノックやってみる　10~14

#10. 行数のカウント
行数をカウントせよ．確認にはwcコマンドを用いよ．
#解答

```py
frame="hightemp.txt"
count=0
with open(frame) as data_file:#frameを違う名前data_fileに書き換えている感覚
  for line in data_file:
    count+=1
    
print(count)
```
**実行結果**
![コメント 2019-09-04 144719.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475270/730d45f2-614f-4782-8aac-53e72355e6e3.png)


**with**を使うことでファイルの読み書きでは最後に書かなければいけない**close()**を書く必要がなくなる！

#UNIXコマンド確認
**wc --line hightemp.txt**と打つことでhightemp.txtの行数を確認できる！

![コメント 2019-09-04 144527.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475270/6e1edc11-db7f-245b-60f5-6c85b4a3c609.png)

#11. タブをスペースに置換
タブ1文字につきスペース1文字に置換せよ．確認にはsedコマンド，trコマンド，もしくはexpandコマンドを用いよ．

タグはpython上では**¥t**と表記される！
#解答
![コメント 2019-09-04 145100.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475270/125f02e9-316b-ff52-9575-260b9438598b.png)

#UNIXコマンド確認
文字列の置き換えは「s」コマンドを使って、**「s/置換前/置換後/」**と指定します。例えば、文字列「GNU」を「gnu」に置き換えるならば、「s/GNU/gnu/」と指定します。

![コメント 2019-09-04 150151.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475270/44c82428-c9cc-edb7-959f-c24387e9cecc.png)
これでは、**一つの処理しかしない…**　ので**繰り返し処理**をする！

各行に含まれる全てのパターンを置き換えたい場合は、「s」コマンドに**「g」オプション**を付けて実行する！
![コメント 2019-09-04 145915.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475270/8d245dc4-cbf4-b558-1d77-b4ebb8623844.png)

#12. 1列目をcol1.txtに，2列目をcol2.txtに保存
各行の1列目だけを抜き出したものをcol1.txtに，2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ．確認にはcutコマンドを用いよ．

open("ファイル名","**w**")のwは**新規作成**の意味！
**\t**は**¥t**と同じ意味で、**タブ**を意味する！
**\n**は**¥n**と同じ意味で、**改行**を意味する！
詳しくは以下のページへ
https://www.javadrive.jp/python/string/index2.html
#解答
```py
fname = 'hightemp.txt'
with open(fname) as data_file,open('col1.txt','w') as col1_file,open('col2.txt','w') as col2_file:
    for line in data_file:
        cols = line.split('\t')
        col1_file.write(cols[0] + '\n')
        col2_file.write(cols[1] + '\n')
```
これで正解だが、見栄えが悪い…

```py
fname = 'hightemp.txt'
with open(fname) as data_file, \  #\を書けば改行してもよい！
        open('col1.txt','w') as col1_file, \
        open('col2.txt','w') as col2_file:
    for line in data_file:
        cols = line.split('\t')
        col1_file.write(cols[0] + '\n')
        col2_file.write(cols[1] + '\n')
```
#UNIXコマンド確認
![コメント 2019-09-04 160920.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475270/55d3cee2-2f1b-9025-8e8c-8fc7327582d5.png)

#13. col1.txtとcol2.txtをマージ
12で作ったcol1.txtとcol2.txtを結合し，元のファイルの1列目と2列目をタブ区切りで並べたテキストファイルを作成せよ．確認にはpasteコマンドを用いよ．

同時ループを行うときには、**zip**が必要！
![コメント 2019-09-04 161932.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475270/eb3ec9ec-336e-ded3-ddf5-97248bb89993.png)

**rstrip()**は**末尾の空白文字**を無くす！(https://docs.python.org/ja/3/library/stdtypes.html#str.rstrip)
#解答
```py
with open('col1.txt') as col1_file, \
        open('col2.txt') as col2_file, \
        open('merge.txt','w') as out_file:

    for col1_line, col2_line in zip(col1_file, col2_file):
        out_file.write(col1_line.rstrip() + '\t' + col2_line.rstrip() + '\n')
```

#UNIXコマンド確認
![コメント 2019-09-04 162625.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475270/c83ca7c8-a24a-7dd6-d5f8-2aca04d1a5df.png)

#14. 先頭からN行を出力
自然数Nをコマンドライン引数などの手段で受け取り，入力のうち先頭のN行だけを表示せよ．確認にはheadコマンドを用いよ．
###**enumerate関数**とは？
![コメント 2019-09-04 165936.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475270/77f73784-be2b-0f70-c610-7e64155bc856.png)
#解答

```py
fname = 'hightemp.txt'
n = int(input('自然数を入力して!'))

with open(fname) as data_file:
    for i, line in enumerate(data_file):
        if i >= n:
            break
        print(line.rstrip())
```
**N=2の出力例**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475270/072dbaba-73f4-bdbd-c371-c19b3d2ff1db.png)
**N=10の出力例**
![コメント 2019-09-04 165554.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475270/5fdd47db-b80d-c5c3-a44d-e98a485179e6.png)

#UNIXコマンド確認
![コメント 2019-09-04 170706.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475270/978728bb-3e10-16a3-f14f-f4c0bb31c029.png)