言語処理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="")