#Working With Files in Python
#https://realpython.com/working-with-files-in-python/
#python3
import os
from pathlib import Path
import shutil
#filepathからファイル名取得
basename = os.path.basename(filepath)
basename_without_ext = os.path.splitext(os.path.basename(filepath))[0]
#ファイルの存在確認
cwd = os.getcwd()
cwd_f = cwd + "/"+filename
if os.path.isfile(cwd_f) == True
#ファイル読み取り
#https://dbader.org/blog/python-file-io
with open('data.txt', 'r') as f:
data = f.read()
print('context: {}'.format(data))
#ファイル読み取り&編集
with open('data.txt', 'w') as f:
data = 'some data to be written to the file'
f.write(data)
#フォルダー&ファイルリストの取得
#フォルダー構造
# my_directory
# ├── file1.py
# ├── file2.csv
# ├── file3.txt
# ├── sub_dir
# │ ├── bar.py
# │ └── foo.py
# ├── sub_dir_b
# │ └── file4.txt
# └── sub_dir_c
# ├── config.py
# └── file5.txt
#方法1
entries = os.listdir('my_directory')#entriesはリスト
for entry in entries:
print(entry)
#→['file1.py', 'file2.csv', 'file3.txt', 'sub_dir', 'sub_dir_b', 'sub_dir_c']
#方法2 python 3.5以後
with os.scandir('my_directory') as entries:#entriesはイテレータ
for entry in entries:
print(entry.name)
#方法3 python 3.4以後
entries = Path('my_directory')
for entry in entries.iterdir():
print(entry.name)
#サブフォルダを含むリスト取得
for dirpath, dirname, files in os.walk('.'):
print(f'Found directory: {dirpath}')
for file_name in files:
print(file_name)
#ファイル判断
#方法1
for entry in os.listdir(basepath):
if os.path.isfile(os.path.join(base_path, entry)):
print(entry)
#方法2 python 3.5以後
with os.scandir(basepath) as entries:
for entry in entries:
if entry.is_file():
print(entry.name)
#方法3 python 3.4以後
basepath = Path('my_directory')
for entry in basepath.iterdir():
if entry.is_file():
print(entry.name)
# or
basepath = Path('my_directory')
files_in_basepath = (entry for entry in basepath.iterdir() if entry.is_file())
for item in files_in_basepath:
print(item.name)
#サブフォルダ取得
#方法1
for entry in os.listdir(basepath):
if os.path.isdir(os.path.join(basepath, entry)):
print(entry)
#方法2
with os.scandir(basepath) as entries:
for entry in entries:
if entry.is_dir():
print(entry.name)
#方法3
for entry in basepath.iterdir():
if entry.is_dir():
print(entry.name)
#ファイルの編集時刻取得
#方法1
with os.scandir('my_directory') as entries:
for entry in entries:
info = entry.stat()
print(info.st_mtime)
#方法2
for entry in basepath.iterdir():
info = entry.stat()
print(info.st_mtime)
#※ 時刻変換関係
timestamp = int(info.st_mtime)#ms秒を削除
dt = datetime.datetime.utcfromtimestamp(info.st_mtime) #st_mtime→datetimeに
dt = dt.strftime('%Y-%m-%d %H:%M:%S')
#https://strftime.org/
#https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
#フォルダーの存在確認
os.path.exists('directory')
#フォルダ作成
#方法1
try:
os.mkdir('directory')
except FileExistsError as e:
print(e)
#方法2
p = Path('directory')
try:
p.mkdir()
except FileExistsError as e:
print(e)
#※エラー無視時,
p.mkdir(exist_ok=True)
#※サブフォルダー作成
os.makedirs('floder/subf/sub')
#一時ファイルの作成
from tempfile import TemporaryFile
# 一時ファイル作成&データ入力
fp = TemporaryFile('w+t')
fp.write('Hello World!')
# データ読み込み
fp.seek(0)
data = fp.read()
print(data)
# ファイルを閉じる(自動削除)
fp.close()
#with バージョン
with TemporaryFile('w+t') as fp:
fp.write('i am good man!')
fp.seek(0)
fp.read()
#一時フォルダの作成
import tempfile
with tempfile.TemporaryDirectory() as tmpdir:
print('Created temporary directory ', tmpdir)
print(os.path.exists(tmpdir))
#ファイル削除
os.remove(file)
#or
os.unlink(file)
#フォルダの削除
os.rmdir(dir)
#or
dir = Path('my_documents/bad_dir')
dir.rmdir()
#フォルダーツリーの削除
shutil.rmtree(dir_tree)
#ファイルコピー
shutil.copy(src, dst)
#or
shutil.copy2(src, dst)#ファイルのプロパティもコピー
#フォルダーツリーのコピー
dst = shutil.copytree('data', 'databackup')
#ファイルおよびフォルダーの移動
dst = shutil.move('dir/', 'backup/')
#ファイルおよびフォルダーのリネーム
os.rename('first.zip', 'first_01.zip')
#.txt ファイル探し
#Strings and Character Data in Python
#https://realpython.com/python-strings/
#方法1
for f_name in os.listdir('directory'):
if f_name.endswith('.txt'):
print(f_name)
#方法2
import fnmatch
for f_name in os.listdir('directory'):
if fnmatch.fnmatch(f_name, 'data_*_2020*.txt'):
print(f_name)
#方法3
import glob
for name in glob.glob('*/*/*[0-9]*.txt'):#サブフォルダ、0~9の文字を含むの.txtファイルを探し
print(name)
#zipファイルの読み込み
import zipfile
with zipfile.ZipFile('data.zip', 'r') as zipobj:
for names in zipobj.namelist():
if os.path.isfile(names)
info = zipobj.getinfo(names)
print(info.file_size,bar_info.date_time,bar_info.filename)
#zipファイルから指定ファイルの解凍
data_zip = zipfile.ZipFile('data.zip', 'r')
#data.zipの中のfile1.pyを作業ディレクトリへ解凍
data_zip.extract('file1.py')
#全てを指定フォルダーへ解凍
data_zip.extractall(path='extract_dir/')
#パスワードある場合
data_zip.extractall(path='extract_dir', pwd='password')
data_zip.close()
#zipファイルの作成&追加
#作成
file_list = ['file1.py', 'sub_dir/', 'sub_dir/bar.py', 'sub_dir/foo.py']
with zipfile.ZipFile('new.zip', 'w') as new_zip:
for name in file_list:
new_zip.write(name)
#追加
with zipfile.ZipFile('new.zip', 'a') as new_zip:
new_zip.write('data.txt')
new_zip.write('latin.txt')
#tarファイルの読み込み
import tarfile
with tarfile.open('example.tar', 'r') as tar_file:
#mode :['r','r:gz','r:bz2','w','w:gz','w:xz','a']
for entry in tar_file.getmembers():
print(entry.name)
print(' Modified:', time.ctime(entry.mtime))
print(' Size :', entry.size, 'bytes')
#or
f = tar_file.extractfile('app.py')
f.read()
#tarファイルから指定ファイルの解凍
tar = tarfile.open('example.tar', mode='r')
#カレントディレクトリに解凍
tar.extract('README.md')
#全てを指定フォルダーへ解凍
tar.extractall(path="extracted/")
#tarファイルの作成&追加
#作成
import tarfile
file_list = ['app.py', 'config.py', 'CONTRIBUTORS.md', 'tests.py']
with tarfile.open('packages.tar', mode='w') as tar:
for file in file_list:
tar.add(file)
#追加
with tarfile.open('package.tar', mode='a') as tar:
tar.add('foo.bar')
#確認
with tarfile.open('package.tar', mode='r') as tar:
for member in tar.getmembers():
print(member.name)
#shutil.make_archive()でフォルダー圧縮
import shutil
#dataフォルダーしたのファイルをbackup.tarに圧縮
shutil.make_archive('data/backup', 'tar', 'data/')
#解凍
shutil.unpack_archive('backup.tar', 'extract_dir/')
#複数ファイルの読み込み
#https://docs.python.org/3/library/fileinput.html
import fileinput,sys
for line in fileinput.input():
if fileinput.isfirstline():
print(f'\n--- Reading {fileinput.filename()} ---')
print(' -> ' + line, end='')
More than 3 years have passed since last update.
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme