- python初学者、触ったことない人が投稿しています
- 個人的にあまり馴染みのない書き方について記載しています
- 誤っている箇所等があればコメントでご指摘いただけると幸いです
- こちらの記事はオブジェクトとクラス編の続きとなっていますので気になる方は是非!
では本編へ
ファイル操作
- 基本操作
-
print
関数でも使うことが可能 -
close
は最後使うようにする- with ステートメントを使うようにする
-
.py
text = """\
aaa
bbb
ccc
ddd
"""
# ファイルを選択
f = open('test.txt', 'w')
f.write(test)
print('i am tester', file=f)
f.close()
# with ステートメントを使った内容
with open('test.txt', 'w') as f:
f.write(test)
# ファイルの読み込み
# 全体の読み込み
with open('test.txt', 'r') as f:
print(f.read())
# 一行読み込み
with open('test.txt', 'r') as f:
while True:
line = f.readline()
# デフォルトでendに\nが入るので''に変更
print(line,end='')
if not line:
break
# chunkで指定した文字数で読み込み
with open('test.txt', 'r') as f:
while True:
chunk= 2
line = f.read(2)
# 2文字ずつ読み込む
print(line)
if not line:
break
# seekを使って飛ばす
with open('test.txt', 'r') as f:
print(f.read(1))
f.seek(5)
# 五文字飛ばした後の文字を出力
print(f.read(1))
# 書き込みと読み込みを同時に
with open('test.txt', 'w+') as f:
f.write(text)
f.seek(0) # 書き込み後に先頭に戻す
print(f.read())
組み込み関数open
文字 | 意味 |
---|---|
r |
読み込み用に開く (デフォルト) |
w |
書き込み用に開き、まずファイルを切り詰める |
x |
排他的な生成に開き、ファイルが存在する場合は失敗する |
a |
書き込み用に開き、ファイルが存在する場合には末尾に追記する |
b |
バイナリモード |
t |
テキストモード |
+ |
更新用に開く (読み込み・書き込み用) |
テンプレート
-
string.Template
は読み込み専用で使用する
.py
import string
template = """\
Hi $name.
$context
Have a good day
"""
t=string.Template(template)
contents = t.substitute(name='taro',context='hello how are you')
print(contents)
CSVファイルにおける書き込みと読み込み
.py
import csv
# csvへの書き込み
with open('test.csv','w')as csvf:
fieldnames = ['Name','Count']
writer = csv.DictWriter(csvf,fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'Name':'taro','Count':2})
writer.writerow({'Name': 'hanako', 'Count': 1})
# csvの読み込み
with open('test.csv','r')as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row['Name'],row['Count'])
ファイル操作:ライブラリ
-
os
- 公式を参照
-
pathlib
- 公式を参照
-
shuntil
- 公式を参照
-
glob
- 公式を参照
-
ファイル圧縮
.pyimport tarfile with tarfile.open('test.tar.gz','w:gz') as tar: tar.add('test_dir') with tarfile.open('test.tar.gz','r:gz') as tar: # 展開 tar.extractall(path='test_tar') with tar.extractfile('{filename}') as file: print(file.read())
-
zipファイル
- zip
.pyimport zipfile with zipfile.ZipFile('test.zip','w') as zip: zip.write('test_dir') zip.write('test_dir/test.txt') with zipfile.ZipFile('test.zip','r') as zip: zip.extractall('hoge') # 1ファイルのみ確認 with zip.open('hoge/hoge.txt') as file: print(file.read())
-
tempfile
- バッファの中で作成されるため、終わったあとは削除される
- fileに出力したり、ディレクトリに吐き出すことも可能性
.pyimport tempfile with tempfile.TemporaryFile(mode='w+') as temp: temp.write('test') temp.seek(0) print(temp.read()) # fileに保存するやり方 with tempfile.NamedTemporaryFile(delete=False) as temp: print(temp.name) with open(temp.name, 'w+') as file: file.write('testtest\n') file.seek(0) print(file.read())
最後に
- ファイル操作は他の言語よりも使いやすいイメージ
- sbuproocessにおいてはshellに投げることができるのは驚いたな
- ただ、shellインジェクションに気をつけないといけないからあまり推奨されていない
- 次回は簡単なアプリケーションを作ってみます