個人的神殿

プログラミング

言語処理100本ノック 第2章

10.
read()は文字列
readlines()は1行ずつファイル終端まで読み込んだリスト(改行文字も含まれる)。
readline()は1行ごとに読み込み、その処理を繰り返すもの。

with open("hightemp.txt", encoding = "utf-8") as fp:
    lines = fp.readlines()
    print(len(lines))

11.

with open("hightemp.txt", encoding = "utf-8") as fp:
    text = fp.read()
print(text.replace("\t", " "))

12.
write(s)は文字列書込み 改行もきちんと反映される。
writelines(list)はリストの要素(文字列のみ)を連結して書込み。1行ごとに改行したいんなら改行コードを忘れずに。

col1, col2 = [], []
with open("hightemp.txt", encoding = "utf-8") as fp:
    lines = fp.readlines()
    for line in lines:
        col1.append(line.split()[0] + "\n")
        col2.append(line.split()[1] + "\n")


with open("col1.txt", "w", encoding = "utf-8") as fp2:
    fp2.writelines(col1)
with open("col2.txt", "w", encoding = "utf-8") as fp3:
    fp3.writelines(col2)

13.

with open("col1.txt", encoding = "utf-8") as fp1, open("col2.txt", encoding="utf-8") as fp2:
    lines1, lines2 = fp1.readlines(), fp2.readlines()

with open("col3.txt", "w", encoding = "utf-8") as writer:
    col3 = [one.strip("\n") + "\t" + two for one, two in zip(lines1, lines2)]
    writer.writelines(col3)

14.

n = int(input())
with open("hightemp.txt", encoding = "utf-8") as fp:
    for x in fp.readlines()[:n]:
        print(x)

15.

  • nから-1行まで、つまり最後から数えてn行。
with open("hightemp.txt", encoding = "utf-8") as fp:
    for x in fp.readlines()[-1 * n:]:
        print(x)

16.

with open("hightemp.txt", encoding = "utf-8") as fp:
    lines = fp.readlines()
for i in range(0, len(lines), n):
    print(lines[i:i + n])

17.

with open("hightemp.txt", encoding = "utf-8") as fp:
    lines = fp.readlines()
    first_cols = {line.split()[0] for line in lines}
print(first_cols)

18.
sorted(lines, key = ...)のkeyのxはlinesの要素を表している。
通常は昇順、降順にしたいならreverse属性をTrueにする。

with open("hightemp.txt", encoding = "utf-8") as fp:
    lines = fp.readlines()
for line in sorted(lines, key = lambda x: x.split()[2], reverse = True):
    print(line, end = "")

19.
defaultdictを使うと、キーが存在しなかった時のデフォルト値を設定できるらしい。
なるほど、if文でキーが存在するかしないかを調べて、存在しなかったら追加っていう面倒なことをせずに済むんだね。

from collections import defaultdict
prefectures = defaultdict(int)

with open("hightemp.txt", encoding="utf-8") as fp:
    lines = fp.readlines()
    for line in lines:
        prefectures[line.split()[0]] += 1

with open("hightemp.txt", encoding="utf-8") as fp:
    lines = fp.readlines()

print(prefectures)
for line in sorted(lines, key=lambda x: prefectures[x.split()[0]], reverse=True):
    print(line, end="")