ハイファットマンの友人M

ハイファットマンはおともだちです。ほぼメモ

言語処理100本ノック(その7)

3章問22から

22. カテゴリ名の抽出

記事のカテゴリ名を(行単位ではなく名前で)抽出せよ.

import re
from q20 import load_file

split_text = load_file().splitlines()
pattern = r"\[\[Category:(.*?)\]\]"
repattern = re.compile(pattern)

for t in split_text:
    match = repattern.match(t)
    if match:
        print(match[1])
  • (.*?).*にマッチしたものをmatch[1]で取り出して出力

実行結果

$ python 22.py
イギリス|*
英連邦王国|*
G8加盟国
欧州連合加盟国
海洋国家
君主国
島国|くれいとふりてん
1801年に設立された州・地域

参考

23. セクション構造

記事中に含まれるセクション名とそのレベル(例えば"== セクション名 =="なら1)を表示せよ.

import re
from q20 import load_file

split_text = load_file().splitlines()
pattern = r"(={2,})\s*(.*?)\s*={2,}"
repattern = re.compile(pattern)

for t in split_text:
    match = repattern.match(t)
    if match:
        print(match[2] + ':' + str(len(match[1]) - 1))
  • (={2,}): =が2以上でマッチ、match[1]で取り出せる
  • \s*: スペース
  • (.*?): match[2]で取り出せる
  • マッチする行があれば、出力

実行結果

$ python 23.py
国名:1
歴史:1
地理:1
気候:2
政治:1
外交と軍事:1
地方行政区分:1
主要都市:2
科学技術:1
経済:1
鉱業:2
農業:2
貿易:2
通貨:2
企業:2
交通:1
道路:2
鉄道:2
海運:2
航空:2
通信:1
国民:1
言語:2
宗教:2
婚姻:2
教育:2
文化:1
食文化:2
文学:2
哲学:2
音楽:2
イギリスのポピュラー音楽:3
映画:2
コメディ:2
国花:2
世界遺産:2
祝祭日:2
スポーツ:1
サッカー:2
競馬:2
モータースポーツ:2
脚注:1
関連項目:1
外部リンク:1

参考

24. ファイル参照の抽出

記事から参照されているメディアファイルをすべて抜き出せ.

import re
from q20 import load_file

split_text = load_file().splitlines()
pattern = r"\[\[File:(.*?)\|thumb"
repattern = re.compile(pattern)

for t in split_text:
    match = repattern.match(t)
    if match:
        print(match[1])

実行結果

$ python 24.py
Battle of Waterloo 1815.PNG
The British Empire.png
Uk topo en.jpg
BenNevis2005.jpg
Elizabeth II greets NASA GSFC employees, May 8, 2007 edit.jpg
Palace of Westminster, London - Feb 2007.jpg
David Cameron and Barack Obama at the G20 Summit in Toronto.jpg
Soldiers Trooping the Colour, 16th June 2007.jpg
Scotland Parliament Holyrood.jpg
London.bankofengland.arp.jpg
City of London skyline from London City Hall - Oct 2008.jpg
Oil platform in the North SeaPros.jpg
Eurostar at St Pancras Jan 2008.jpg
Heathrow T5.jpg
Anglospeak.svg

言語処理100本ノック(その6)

3章に入りました。

Wikipediaの記事を以下のフォーマットで書き出したファイルjawiki-country.json.gzがある.

1行に1記事の情報がJSON形式で格納される
各行には記事名が"title"キーに,記事本文が"text"キーの辞書オブジェクトに格納され,そのオブジェクトがJSON形式で書き出される
ファイル全体はgzipで圧縮される
以下の処理を行うプログラムを作成せよ.

20. JSONデータの読み込み

Wikipedia記事のJSONファイルを読み込み,「イギリス」に関する記事本文を表示せよ.問題21-29では,ここで抽出した記事本文に対して実行せよ.

import json

def load_file():
    file_list = open('jawiki-country.json').readlines()
    for item in file_list:
        json_item = json.loads(item)
        if json_item['title'] == 'イギリス':
            return json_item['text']

if __name__ == '__main__':
    print(load_file())
  • 1行ずつ読み込んでパース
  • titleがイギリスだったら、本文を表示してループを抜ける

実行結果は長いので省略。

参考

21. カテゴリ名を含む行を抽出

記事中でカテゴリ名を宣言している行を抽出せよ

import re
from q20 import load_file

split_text = load_file().splitlines()
pattern = r"\[\[Category"
repattern = re.compile(pattern)

for t in split_text:
    if repattern.match(t):
        print(t)
  • 2行目で、20問目のload_fileメソッドを読み込んでいます
  • 1行ずつループを回して[[Categoryを含む行なら出力

実行結果

$ python 21.py
[[Category:イギリス|*]]
[[Category:英連邦王国|*]]
[[Category:G8加盟国]]
[[Category:欧州連合加盟国]]
[[Category:海洋国家]]
[[Category:君主国]]
[[Category:島国|くれいとふりてん]]
[[Category:1801年に設立された州・地域]]

参考

言語処理100本ノック(その5)

前回の続きから

第2章 15から

15. 末尾のN行を出力

自然数Nをコマンドライン引数などの手段で受け取り,入力のうち末尾のN行だけを表示せよ.確認にはtailコマンドを用いよ.

print('自然数を入力')
input_num = int(input())

file_list = open('hightemp.txt').readlines()
for line in file_list[len(file_list)- input_num:]:
    print(line, end='')

実行結果

$ python 15.py
自然数を入力
3
山梨県   大月  39.9    1990-07-19
山形県   鶴岡  39.9    1978-08-03
愛知県   名古屋   39.9    1942-08-02

tailコマンドの実行結果

$ tail -n 3 chapter2/hightemp.txt
山梨県   大月  39.9    1990-07-19
山形県   鶴岡  39.9    1978-08-03
愛知県   名古屋   39.9    1942-08-02

16. ファイルをN分割する

自然数Nをコマンドライン引数などの手段で受け取り,入力のファイルを行単位でN分割せよ.同様の処理をsplitコマンドで実現せよ.

import math

print('自然数を入力')
input_num = int(input())

file_list = open('hightemp.txt').readlines()
file_size = math.ceil(len(file_list) / input_num)
for n in range(0, file_size):
    f = open(str(n+1)+'.txt', 'w')
    f.write(''.join(file_list[n*input_num:(n+1)*input_num:1]))
    f.close()
  • file_size = 作成するファイルの数
  • file_list[start:end:step]をファイルに出力

実行結果

$ python 16.py
自然数を入力
10
$ ls *.txt
1.txt  2.txt  3.txt  col1.txt  col2.txt  hightemp.txt
$ cat 1.txt
高知県   江川崎   41  2013-08-12
埼玉県   熊谷  40.9    2007-08-16
岐阜県   多治見   40.9    2007-08-16
山形県   山形  40.8    1933-07-25
山梨県   甲府  40.7    2013-08-10
和歌山県    かつらぎ    40.6    1994-08-08
静岡県   天竜  40.6    1994-08-04
山梨県   勝沼  40.5    2013-08-10
埼玉県   越谷  40.4    2007-08-16
群馬県   館林  40.3    2007-08-16

col1.txt col2.txtは関係ないファイルです。

splitコマンドの実行結果

$ ls x*
xaa  xab  xac
$ cat xaa
高知県   江川崎   41  2013-08-12
埼玉県   熊谷  40.9    2007-08-16
岐阜県   多治見   40.9    2007-08-16
山形県   山形  40.8    1933-07-25
山梨県   甲府  40.7    2013-08-10
和歌山県    かつらぎ    40.6    1994-08-08
静岡県   天竜  40.6    1994-08-04
山梨県   勝沼  40.5    2013-08-10
埼玉県   越谷  40.4    2007-08-16
群馬県   館林  40.3    2007-08-16

17. 1列目の文字列の異なり

1列目の文字列の種類(異なる文字列の集合)を求めよ.確認にはsort, uniqコマンドを用いよ.

file_list = open('hightemp.txt').readlines()
row1 = []
for f in file_list:
    row1.append(f.split('\t')[0])

print('\n'.join(list(set(row1))))
  • for文の中で1列目の文字列をrow1に入れていく
  • setで重複を削除したリストを出力

実行結果

$ python 17.py | sort
千葉県
和歌山県
埼玉県
大阪府
山形県
山梨県
岐阜県
愛媛県
愛知県
群馬県
静岡県
高知県

並び順をuniq sortコマンド実行の結果と合わせるためにsortしています。

uniq sortコマンドの実行結果

$ cut -f1 hightemp.txt | sort | uniq
千葉県
和歌山県
埼玉県
大阪府
山形県
山梨県
岐阜県
愛媛県
愛知県
群馬県
静岡県
高知県

参考

18. 各行を3コラム目の数値の降順にソート

各行を3コラム目の数値の逆順で整列せよ(注意: 各行の内容は変更せずに並び替えよ).確認にはsortコマンドを用いよ(この問題はコマンドで実行した時の結果と合わなくてもよい).

file_list = open('hightemp.txt').readlines()
split_list = [ f.split('\t') for f in file_list ]
split_list.sort(key=lambda x:x[2], reverse=True)
for list in split_list:
    print('\t'.join(list), end='')
  • 3行目で3列目を逆順でソート
  • printでend=''を指定すると改行されない

実行結果

$ python 18.py
高知県   江川崎   41  2013-08-12
埼玉県   熊谷  40.9    2007-08-16
岐阜県   多治見   40.9    2007-08-16
山形県   山形  40.8    1933-07-25
山梨県   甲府  40.7    2013-08-10
和歌山県    かつらぎ    40.6    1994-08-08
静岡県   天竜  40.6    1994-08-04
山梨県   勝沼  40.5    2013-08-10
埼玉県   越谷  40.4    2007-08-16
群馬県   館林  40.3    2007-08-16
群馬県   上里見   40.3    1998-07-04
愛知県   愛西  40.3    1994-08-05
千葉県   牛久  40.2    2004-07-20
静岡県   佐久間   40.2    2001-07-24
愛媛県   宇和島   40.2    1927-07-22
山形県   酒田  40.1    1978-08-03
岐阜県   美濃  40  2007-08-16
群馬県   前橋  40  2001-07-24
千葉県   茂原  39.9    2013-08-11
埼玉県   鳩山  39.9    1997-07-05
大阪府   豊中  39.9    1994-08-08
山梨県   大月  39.9    1990-07-19
山形県   鶴岡  39.9    1978-08-03
愛知県   名古屋   39.9    1942-08-02

sortコマンドの実行結果

$ sort hightemp.txt -k3 -nr
高知県   江川崎   41  2013-08-12
岐阜県   多治見   40.9    2007-08-16
埼玉県   熊谷  40.9    2007-08-16
山形県   山形  40.8    1933-07-25
山梨県   甲府  40.7    2013-08-10
静岡県   天竜  40.6    1994-08-04
和歌山県    かつらぎ    40.6    1994-08-08
山梨県   勝沼  40.5    2013-08-10
埼玉県   越谷  40.4    2007-08-16
群馬県   館林  40.3    2007-08-16
群馬県   上里見   40.3    1998-07-04
愛知県   愛西  40.3    1994-08-05
静岡県   佐久間   40.2    2001-07-24
愛媛県   宇和島   40.2    1927-07-22
千葉県   牛久  40.2    2004-07-20
山形県   酒田  40.1    1978-08-03
群馬県   前橋  40  2001-07-24
岐阜県   美濃  40  2007-08-16
愛知県   名古屋   39.9    1942-08-02
山梨県   大月  39.9    1990-07-19
山形県   鶴岡  39.9    1978-08-03
大阪府   豊中  39.9    1994-08-08
埼玉県   鳩山  39.9    1997-07-05
千葉県   茂原  39.9    2013-08-11

参考

19. 各行の1コラム目の文字列の出現頻度を求め,出現頻度の高い順に並べる

各行の1列目の文字列の出現頻度を求め,その高い順に並べて表示せよ.確認にはcut, uniq, sortコマンドを用いよ.

file_list = open('hightemp.txt').readlines()
split_list = [ f.split('\t') for f in file_list ]
sort = {}
for s in split_list:
    if s[0] in sort:
        sort[s[0]] += 1
    else:
        sort[s[0]] = 1

for k, v in sorted(sort.items(), key=lambda x: -x[1]):
    print(str(v) + ' ' + str(k))

実行結果

$ python 19.py
3 埼玉県
3 山形県
3 山梨県
3 群馬県
2 岐阜県
2 静岡県
2 愛知県
2 千葉県
1 高知県
1 和歌山県
1 愛媛県
1 大阪府

cut sort uniqコマンドの実行結果

$ cut -f1 hightemp.txt | sort | uniq -c | sort -k1,1 -nr
      3 群馬県
      3 山梨県
      3 山形県
      3 埼玉県
      2 静岡県
      2 愛知県
      2 岐阜県
      2 千葉県
      1 高知県
      1 愛媛県
      1 大阪府
      1 和歌山県

参考


やっと2章が終わりました。
ソースをgithubにおきました。

github.com

Docker for Macでpythonの環境を構築するメモ

新しくMacBookを買ってpythonを触りたいけどMacBookの環境は汚したくないな・・と思ったので dockerでpythonを触れるようにしてみます。

普段はdocker+docker compose+railsで開発しているのでdockerについてはなんとなくわかってますが、自分で構築した事ないというレベルです。

  1. まずはdockerをインストール
  2. pythonのイメージをpullして触ってみる
  3. Dockerfileを書いてみる
  4. ホストのディレクトリをマウントする

1. まずはdockerをインストール

docs.docker.com

2.pythonのイメージをpullして触ってみる

コンテナ内で実行したコマンドはDockerfileに記載するのでメモしておきます。

  • pythonのイメージをpull
$ sudo docker pull python:3.6
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
python              3.6                 c1e459c00dc3        2 weeks ago         692MB
  • コンテナ内に入る
$ docker run -it --name 3.6 python:3.6 /bin/bash
  • pythonのバージョン確認
# python --version
Python 3.6.4
  • 必要なものをインストール+ユーザー追加+pythonが動くか確認
# apt-get update
# apt-get install -y vim
# apt-get install sudo
# adduser username
# gpasswd -a username sudo
# su - username
$ vim hello_world.py
$ python hello_world.py

3. Dockerfileを書いてみる

先ほど実行したコマンドをDockerfileに書き出す。

FROM python:3.6

RUN set -x && \
    apt-get update && \
    apt-get install -y vim sudo && \
    useradd -ms /bin/bash username && \
    gpasswd -a usename sudo

USER username
WORKDIR /home/username

docker runするとrootユーザー+ルートディレクトリでコンテナ入ってしまうので、
USERとWORKDIRを追加して指定したユーザー+ディレクトリでログインするようにしました。
あと、adduserだと対話的にパスワード等を入力しないといけないので、Dockerfileではuseraddコマンドにしています。

次にDockerfileからimageを作ります。
Dockerfileを置いているディクトリで以下コマンドを実行し、imageが作られた事を確認します。

$ docker build -t pytest .
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
pytest              latest              422b3750bcfe        20 hours ago        735MB
python              3.6                 c1e459c00dc3        3 weeks ago         692MB

imageにpytestが追加されていることを確認できました。
このイメージからコンテナを起動します。

$ docker run -it pytest /bin/bash
username@a1291da72c01:~$ pwd
/home/username

無事起動できました。指定したユーザー+ディレクトリでログインもできています。

ちなみに、コンテナ起動中にpsで確認してみると以下のようになっているかと思います。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES
a1291da72c01        pytest              "/bin/bash"         About a minute ago   Up About a minute                               unruffled_fermi
ef71d433718f        python:3.6          "/bin/bash"         16 minutes ago       Exited (0) 10 minutes ago                       3.6

exitしたあとにもう一度実行するとstatusは変わっていますが消えません。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
a1291da72c01        pytest              "/bin/bash"         3 minutes ago       Exited (0) 2 seconds ago                        unruffled_fermi
ef71d433718f        python:3.6          "/bin/bash"         17 minutes ago      Exited (0) 12 minutes ago                       3.6

exit後にコンテナを削除するには--rmをつけてdocker runを実行します。

$  docker run --rm -it pytest /bin/bash

statusがExitedになっているコンテナを起動するには以下のコマンドを実行します。

$ docker start コンテナID

ex)
$ docker start a1291da72c01
a1291da72c01

起動したコンテナに入るにはexecを使います。

$ docker exec -it {dockerのname} /bin/bash

ex)
$ docker exec -it unruffled_fermi /bin/bash
username@a1291da72c01:~$

4. ホストのディレクトリをマウントする

ソースはホスト側、実行するのはdocker側にしたかったのでホストのディレクトリをdockerにマウントします。 -vをつける事でマウントできます。

$ docker run --rm -v {ホスト側のディレクトリ}:{docker内のディレクトリ} -it {イメージ名} /bin/bash

ex)
$ docker run --rm -v /Users/username/hoge/:/home/username/ -it python /bin/bash

最低限ですがこれで一応完了です。

docker runで毎回-vを指定するのはめんどくさいので、Dockerfileでマウントの設定が可能ならそうしたいです。

参考

LPIC202に合格しました

LPIC202(version 4.5) に合格したのでやったこと等を書いておこうと思います。

 

スコア

660/800

 

勉強期間

2ヶ月くらい

 

対策

2ヶ月前〜3週間前くらい:

  • ping-tのweb問題集を1日40分くらい
  • 豆本を読み進める

通勤時間を使ってweb問題集をやって、家に帰ってちょっと小豆本を読むくらい

結構のんびりやってました

 

Linux教科書 LPICレベル2 Version 4.5対応

Linux教科書 LPICレベル2 Version 4.5対応

 

 3週間前〜:

  • ping-tのコマ問・web問題集を解く
  • スピードマスターを解く

ping-tは、コマ問を分野ごとに全部正解するまで解く→web問題集で復習→次の日にweb問題集で再度復習という感じで進めていました。

また、この辺で試験の予約をしたので、ようやく本腰を入れ始めました。

 

スピードマスターはこちら

 

Linux教科書 LPICレベル2 スピードマスター問題集 Version4.5対応

Linux教科書 LPICレベル2 スピードマスター問題集 Version4.5対応

 

 前日:

  • ping-tでコマ問とweb問題集を解く
  • スピードマスターを解く
  • UbuntuLDAPとsambaを入れて軽くコマンド確認
  • スピードマスターの模擬問題を解く

 

追い込み

web問題集は金94%になるまで、スピードマスターは全章2周くらい解きました。

LDAPとSambaは覚えられる気がしなかったのでインストールして軽くコマンド確認だけやりました。やっぱり実際触った方が覚えられたのでよかったです。

前日に解いたスピードマスターの模擬試験では7割くらいでした。

 

試験の感想

スピードマスターの方が実際の問題に近い感じです。正直ping-tだけだと厳しい印象。

試験前は「passwdなのかpasswordなのかみたいな細かいところが覚えられない…」と思ってましたがそういう問題はあまり出ませんでした。

入力する問題は5問くらいだった気がします。

 

全体通して

version 4.5になって難しくなったという感想をちょこちょこ見てたので心配してましたが、案外取れてました。

ただ、各サービスの設定等を覚えるのが辛くて仕方なかったです。普段はnginxとpostfixを軽く触るくらいなので、それ以外のものは全然で覚えることが多かったです。時間があるのであれば、一通りインストールして色々触ってみる方が覚えららと思います。

 

はじめの1ヶ月は結構のんびりしていたので、気合い入れればもっとはやく取れてた気がします。

 

以上

言語処理100本ノック(その4)

前回の続きから

第2章 10から14まで

10. 行数のカウント

行数をカウントせよ.確認にはwcコマンドを用いよ.

file = open('hightemp.txt')
file_list = file.readlines()
print(len(file_list))

# 実行結果
24
# wcコマンドの結果
$ wc -l hightemp.txt 
24 hightemp.txt

11. タブをスペースに置換

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

file = open('hightemp.txt')
for line in file:
    print(line.replace('\t', ' '), end='')

# 実行結果
高知県 江川崎 41 2013-08-12
埼玉県 熊谷 40.9 2007-08-16
岐阜県 多治見 40.9 2007-08-16
山形県 山形 40.8 1933-07-25
山梨県 甲府 40.7 2013-08-10
和歌山県 かつらぎ 40.6 1994-08-08
静岡県 天竜 40.6 1994-08-04
山梨県 勝沼 40.5 2013-08-10
埼玉県 越谷 40.4 2007-08-16
群馬県 館林 40.3 2007-08-16
群馬県 上里見 40.3 1998-07-04
愛知県 愛西 40.3 1994-08-05
千葉県 牛久 40.2 2004-07-20
静岡県 佐久間 40.2 2001-07-24
愛媛県 宇和島 40.2 1927-07-22
山形県 酒田 40.1 1978-08-03
岐阜県 美濃 40 2007-08-16
群馬県 前橋 40 2001-07-24
千葉県 茂原 39.9 2013-08-11
埼玉県 鳩山 39.9 1997-07-05
大阪府 豊中 39.9 1994-08-08
山梨県 大月 39.9 1990-07-19
山形県 鶴岡 39.9 1978-08-03
愛知県 名古屋 39.9 1942-08-02
# sedコマンドでの実行結果
$ sed -e "s/\t/ /g" hightemp.txt 
高知県 江川崎 41 2013-08-12
埼玉県 熊谷 40.9 2007-08-16
岐阜県 多治見 40.9 2007-08-16
山形県 山形 40.8 1933-07-25
山梨県 甲府 40.7 2013-08-10
和歌山県 かつらぎ 40.6 1994-08-08
静岡県 天竜 40.6 1994-08-04
山梨県 勝沼 40.5 2013-08-10
埼玉県 越谷 40.4 2007-08-16
群馬県 館林 40.3 2007-08-16
群馬県 上里見 40.3 1998-07-04
愛知県 愛西 40.3 1994-08-05
千葉県 牛久 40.2 2004-07-20
静岡県 佐久間 40.2 2001-07-24
愛媛県 宇和島 40.2 1927-07-22
山形県 酒田 40.1 1978-08-03
岐阜県 美濃 40 2007-08-16
群馬県 前橋 40 2001-07-24
千葉県 茂原 39.9 2013-08-11
埼玉県 鳩山 39.9 1997-07-05
大阪府 豊中 39.9 1994-08-08
山梨県 大月 39.9 1990-07-19
山形県 鶴岡 39.9 1978-08-03
愛知県 名古屋 39.9 1942-08-02

12. 1列目をcol1.txtに,2列目をcol2.txtに保存

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

file = open('hightemp.txt')
for line in file:
    line_list = line.split('\t)
    col1.write(line_list[0])
    col1.write('\n')
    col2.write(list_line[1])
    col2.write('\n')

# 実行結果
$ cat col1.txt 
高知県
埼玉県
岐阜県
山形県
山梨県
和歌山県
静岡県
山梨県
埼玉県
群馬県
群馬県
愛知県
千葉県
静岡県
愛媛県
山形県
岐阜県
群馬県
千葉県
埼玉県
大阪府
山梨県
山形県
愛知県

$ cat col2.txt 
江川崎
熊谷
多治見
山形
甲府
かつらぎ
天竜
勝沼
越谷
館林
上里見
愛西
牛久
佐久間
宇和島
酒田
美濃
前橋
茂原
鳩山
豊中
大月
鶴岡
名古屋
# cutコマンドの実行結果
$ cut -f 1 hightemp.txt 
高知県
埼玉県
岐阜県
山形県
山梨県
和歌山県
静岡県
山梨県
埼玉県
群馬県
群馬県
愛知県
千葉県
静岡県
愛媛県
山形県
岐阜県
群馬県
千葉県
埼玉県
大阪府
山梨県
山形県
愛知県

$ cut -f 2 hightemp.txt 
江川崎
熊谷
多治見
山形
甲府
かつらぎ
天竜
勝沼
越谷
館林
上里見
愛西
牛久
佐久間
宇和島
酒田
美濃
前橋
茂原
鳩山
豊中
大月
鶴岡
名古屋

13. col1.txtとcol2.txtをマージ

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

col1 = open('col1.txt').readlines()
col2 = open('col2.txt').readlines()
for (line1, line2) in zip(col1, col2):
    print(line1.replace('\n', '\t') + line2.rstrip('\n'))

# 実行結果
高知県   江川崎
埼玉県   熊谷
岐阜県   多治見
山形県   山形
山梨県   甲府
和歌山県    かつらぎ
静岡県   天竜
山梨県   勝沼
埼玉県   越谷
群馬県   館林
群馬県   上里見
愛知県   愛西
千葉県   牛久
静岡県   佐久間
愛媛県   宇和島
山形県   酒田
岐阜県   美濃
群馬県   前橋
千葉県   茂原
埼玉県   鳩山
大阪府   豊中
山梨県   大月
山形県   鶴岡
愛知県   名古屋
# pasteコマンドの実行結果
$ paste col1.txt col2.txt 
高知県   江川崎
埼玉県   熊谷
岐阜県   多治見
山形県   山形
山梨県   甲府
和歌山県    かつらぎ
静岡県   天竜
山梨県   勝沼
埼玉県   越谷
群馬県   館林
群馬県   上里見
愛知県   愛西
千葉県   牛久
静岡県   佐久間
愛媛県   宇和島
山形県   酒田
岐阜県   美濃
群馬県   前橋
千葉県   茂原
埼玉県   鳩山
大阪府   豊中
山梨県   大月
山形県   鶴岡
愛知県   名古屋

14. 先頭からN行を出力

自然数Nをコマンドライン引数などの手段で受け取り,入力のうち先頭のN行だけを表示せよ.確認にはheadコマンドを用いよ.

print('自然数を入力')
input_num = int(input())

file_list = open('hightemp.txt').readlines()
for line in file_list[0:input_num]:
    print(line, end='')

# 実行結果
自然数を入力
3
高知県   江川崎   41  2013-08-12
埼玉県   熊谷  40.9    2007-08-16
岐阜県   多治見   40.9    2007-08-16
# headコマンドの実行結果
$ head -n 3 hightemp.txt 
高知県   江川崎   41  2013-08-12
埼玉県   熊谷  40.9    2007-08-16
岐阜県   多治見   40.9    2007-08-16

今日はここまで

ubuntu16.04にdockerをインストール

ubuntu16.04にdockerをインストールします。

参考にしました。 qiita.com Ubuntu — Docker-docs-ja 1.13.RC ドキュメント

ほぼ上のとおりにできました。


以下メモ

ただ途中まで↓のURLを見てて????ってなりました。

docs.docker.com

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

これをやったあとから

$ sudo apt-get update
〜略〜
パッケージリストを読み込んでいます... 完了
W: https://download.docker.com/linux/ubuntu/dists/xenial/InRelease の取得に失敗しました  Could not resolve host: download.docker.com
W: いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視されるか、古いものが代わりに使われます。

って出るようになってしまった。

結果的に/etc/apt/sources.listの以下の行をコメントアウトしたらOKでした。

deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable

正しいやり方かはわからない・・・・