ファイブ.PythonパスとファイルIO操作

ディレクトリ

  • PythonのファイルIO操作
  • とコンテキスト管理
  • パスの操作

01 PythonのファイルIO操作:

clumn カラム
開いた オープン
読んだ 読みます
書く 書き込み
閉じる 近いです
読み込まれた行 読み込みライン
readlines マルチライン読み取り
求める ファイルポインタ操作
伝えます ポインタの位置

ファイルを開きます

オープン(ファイル、モード= R ''、緩衝= -1、エンコーディング=なし、エラー=なし、改行=なし、closefd =真、オープナ=なし)
示例

f = open('test')
# windows < io.TextIOWrapper name='test', mode='r', encoding='cp936'
# linux < io.TextIOWrapper name='test', mode='r', encoding='utf-8'
print(f.read())
f.close()

ファイル操作は、最も一般的には、読み取りおよび書き込みすることです。
テキストモードとバイナリモード:ファイル・アクセスの2つのモードがあります。異なるモード、異なる操作機能では、パフォーマンスの結果は同じではありません。

オープンパラメータ

  • パスを指定しない場合、作成されるファイルまたはファイル名を開き、デフォルトのパスは、現在ある
    ファイルディスクリプタ
    012占有されています

  • モードモデルの
    読み取り専用のためのオープンRデフォルト、
    書き込みwが唯一開き
    、xは新しいファイルを作成し、書き込み、
    ファイルが存在する場合、開いた書き込みを、そしてAPPEND
    バイナリモードで開かれたB
    トンのデフォルトは、テキストモード
    +はリーダーを開きます元のファイルは読み取り専用、書き込み専用道が見つからないか、オープン読み書きを提供するために、

モード 説明
Rモード writeメソッドが例外をスローする場合は、読み取り専用ファイルを開き、ファイルが存在しない場合は、例外がスローされますFileNotFoundError
ワット 例外は、読み取りをスローされた場合のみ、オープン書く;ファイルが存在しない場合は、直接ファイルを作成し、ファイルが存在する場合、そのファイルの中身を空に
バツ ファイルは、開かれたファイルと書き込みを作成し、存在しません。ファイルが存在する場合、例外がスローされますFileExistsError
A 書き込み専用オープン、追加コンテンツ、ファイルが存在しない、それが後に作成され、ファイルが書き込み専用オープン追加コンテンツ、存在します
rは読み取り専用、書き込み専用ですWXA WXAは関係なく、ファイルの存在するかwは、新しいコンテンツファイルを生成します、ファイルを生成することができ、関係なく、ファイルの最後に、そこにあるかどうかのファイルがオープンに追加することができ; xは、事前のファイルに要求されなければならないファイルを自分で作成し、存在しません。
テキストモードトン 文字ストリームは、文字エンコーディングに応じてファイルのバイトは、キャラクタの操作に応じて、それを評価しました。デフォルトモード。
Bバイナリモード バイトストリーム、バイトの文字コードに関係なくファイルは、理解されます。動作のバイナリモード、バイトのタイプはバイトオペレーションを使用する場合。
  • ファイルポインタ
    = Rポインタは0から始まるモード
    MODE = EOF(ファイルの終わり)で開始ポインタ
  • ()表示ポインタの位置を教えて
  • シーク(オフセット[、そこ])ポインタを移動させる。多くのバイトオフセットドリフト方法。
    テキストモードで:
    スクラッチを示すデフォルト値0は、唯一の正の整数を受け入れそこ
    1は、現在位置が0のみ受け付け示しそこ
    だけ0受け付け、位置からそこEOF 2つの開始
    :バイトパターン
    wenceデフォルト値0は、示しスクラッチ、オフセットは、正の整数を受け入れる
    1オフセット現在位置が、正または負であり得る表しそこから
    オフセットEOF位置から2つの開始は、正または負とすることができるそこ

    共通機能

    機能 説明
    リード(サイズ= -1) すべてのデフォルトは文字の数、バイトバイトモードテキストモードの番号を読み取るために、読んで
    readlineの(サイズ= -1) 行数は、すべてデフォルトでは、一度読んで
    readlines 複数行を読みます
    書き込み(S) S番号文字列がファイルに書き込まれ、文字を返します。
    閉じる() フラッシュおよびクローズファイルオブジェクト、閉じた状態では、無駄に再び閉鎖しました

その他の機能

機能 説明
シーク() 求めることができます
読めます() 読み取り可能です
writeabel() 書き込み可能です
閉まっている() これは、遮断され

02コンテキスト管理

リードに:

#
lst = []
for _ in range(2000):
    lst.append(open("test"))
# OSError: [Errno 24] Too many open files:'test'
print(len(lst))

ulimitのは、開いているファイルの数は、ファイル、デフォルトの1024を開くことです制限すべての制限を表示、-a。

ソリューション:

1.例外処理
の異常、異常な傍受が、コードの多くはOSErrorの異常が現れては、よくない裁判官異常があるため、リソースの制約の生成されます。

f = open('test')
try:
    f.write('abc')
finally:
    f.close()

最後に、すべてのファイルを閉じることができることを確実にするために使用することができます。

2.コンテキスト管理
文書のリリースにインタプリタに特別な構文、。

with open('test') as f:
    f.read()

...キーワードとして使用:
コンテキスト管理の文と新しいスコープを開くことができません
、ステートメントのブロックを実行するときにファイルオブジェクトを自動的にシャットダウン

IOは、オブジェクトファイルのようなオブジェクトに対応し、一般的にシャットダウンする必要は使用しないときは、キャンセル、リソースを解放するためです。
IOは、ファイルディスクリプタfdを取得します、開いています。コンピュータリソースが限られているので、オペレーティングシステムが制限されます。
コンピュータリソースを保護するために、コンピューティングリソースは、排他的ではない、共有されている、いない完全に空乏化されます。
通常の状況下では、資源の明示意識しない限り、問題を解決するためのリソースの制限を大きくしないでください。

StingIO和BytesIO

  • StingIO
    IOモジュールクラス:IOインポートのStringIOから
    メモリ、テキストモードをバッファリングを開くように、あなたは、ファイルオブジェクトと同じように操作することができ
    closeメソッドが呼び出されたときに、バッファが解放される
    のgetValue()ファイルで、全体を取得します。ポインタは関係ありません。
from io import StingIO
sio = StringIO() # 跟文件操作类似
sio.write("test context")
sio.seek(0)
print(sio.getvalue())
print(sio.readline())
sio.close()
  • BytesIO
    IOモジュールクラス:IOインポートからBytesIO
    のようなメモリ、バイナリモードを開いたバッファには、あなたは、ファイルオブジェクトと同じように操作することができ
    closeメソッドが呼び出されたときに、バッファがリリースされる予定
    のgetValue()ファイルを使用して、全体を取得します。ポインタは関係ありません。

同様にStringIO。
利点:一般的に、ディスクは、メモリ動作よりも遅い動作、メモリが十分である、一般的な最適化は、ディスクIO処理を低減する以下接地され、大幅にプログラムの効率を向上させることができます。

  • ファイルのようなオブジェクト
    としてファイルのようなオブジェクトは、オブジェクト・ファイルとして操作することができる
    sockeオブジェクト、入出力オブジェクト(STDIN、STDOUT)は、ファイルのようなオブジェクトであります
from sys import stdout
f = stdout
print(type(f))
f.write('leafgood.com')

03パスの操作

パス操作モジュール

  • os.pathモ​​ジュール:バージョン3.4の前に
from os import path
p = path.join('/etc'. 'sysconfig', 'network')
print(type(p), p)
print(path.exists(p))
print(path.split(p))
print(path.abspath('.'))
p = path.join('o:/', p, 'text.txt')
print(path.dirname(p))
print(path.basename(p))
print(path.splitdrive(p)) # window下使用
  • バージョン3.4の後:pathlibモジュールは、ディレクトリとファイルを含め、操作へのパスオブジェクトを提供します。
from pathlib import Path
p = Path()
p.absolute() #绝对路径
p = p.joinpath('a','b')
p.absolute()
p = p / 'c'  #拼接 等价于 p / = 'c' , p = p.joinpath('c')
#目录初始化
p = Path() #当前目录
p = Path('a', 'b', 'c/d') #当前目录下a/b/c/d
p = Path('/etc')

パスのステッチや分解

オペレータ/
Pahtオブジェクト/ Pathオブジェクト
Pathオブジェクト/文字列または文字列/ Pathオブジェクト

分解
部品属性は、各部分がパスを返すことができます。

joinpath
Pathオブジェクトに文字列を複数接続joinpath(*その他)

パスを取得
STR(パスオブジェクト)パス文字列を取得する
バイト取得バイト(パスオブジェクト)パス文字列
P =パス( 'は/ etc')
印刷(STR(P)は、バイト(P))

親ディレクトリ
p.parentの
p.parentsイテレータオブジェクトを返す
例を

>>> p.parents
<PosixPath.parents>
>>> list(p.parents)
[PosixPath('/home/zhaow/py/c/d'), PosixPath('/home/zhaow/py/c'), PosixPath('/home/zhaow/py'), PosixPath('/home/zhaow'), PosixPath('/home'), PosixPath('/')]
>>> p.parent
PosixPath('/home/zhaow/py/c/d')
>>> p.parent.parent
PosixPath('/home/zhaow/py/c')

絶対パスへの相対パスの後、次いで親ディレクトリを取得する、親は連続
の最後の部分のディレクトリ名
ディレクトリサフィックスサフィックスの最後の部分の拡張
最後のディレクトリステム部、なしサフィックス
サフィックス複数のリターンの拡張リスト
with_suffixを(接尾辞)拡張パス、あるいは延長に追加
最後の部分テーブルと戻り、新しいパスを交換するwith_name(名)

>>> p
PosixPath('/home/zhaow/py/c/d/c/d.ifg.zip')
>>> p.name
'd.ifg.zip'
>>> p.stem
'd.ifg'
>>> p.suffix
'.zip'
>>> p.suffixes
['.ifg', '.zip']
>>> p.with_suffix('.gz')
PosixPath('/home/zhaow/py/c/d/c/d.ifg.gz')
>>> p.with_name('gz')
PosixPath('/home/zhaow/py/c/d/c/gz')
>>> p
PosixPath('/home/zhaow/py/c/d/c/d.ifg.zip')

元のパスを変更しないでください:
CWD()は、現在の作業ディレクトリを返します
(家を)現在のホームディレクトリを返します。

is_dir()がディレクトリである
ファイルかどうか)(is_file
それはソフトリンクであるか否か)(is_symlink
ソケットファイルか)is_socket(
ブロック・デバイス・ファイルかどうか)(is_block_device
キャラクタデバイスか)(is_char_device
それが絶対パスであるかどうか)(is_absolute

決意は()新しいパスを返し、それが解決への直接のソフトリンクであれば、新しいパスは、現在の絶対パスPathオブジェクトである
アブソリュート()
ディレクトリまたはファイルがファイルである(EXISTS
(rmdirを)空のディレクトリを削除し、判定ディレクトリを提供していない空でありますメソッドの
タッチ(モード= 0o666、exist_ok =真) 新しいファイルを作成する
(as_uri)は、パスのURLに戻ります

MKDIR(MODE = 0o777、両親= Falseを、exist_ok =偽)
-親の親ディレクトリを作成するには、真のものと一致するかどうかます。mkdir -p

iterdir()現在のディレクトリの内容の反復、ライフシンセサイザーオブジェクトへの復帰

for x in p.parents[len(p.parents)-1].iterdir():
    print(x, end='\t')
    if x.is_dir():
        flag = False
        for _ in x.iterdir():
            flag = True
            break
        print('dir', 'Not Empty' if flag else 'Empty', sep='\t')
    elif x.is_file():
        print('file')
    else:
        print('other file')

ワイルドカード:
介して所定のパターンに割り当てられたグロブ(パターン)

>>> list(p.glob('*/m*'))  #一个* 任意字符下
[PosixPath('Aclsm/manage.py')]
>>> list(p.glob('*m*'))
>>> list(p.glob('**/m*')) #任意字符任意级别

、再帰的なディレクトリ上に所定のパターンに割り当てrglob(パターン)

マッチ
マッチ(パターン)パターンマッチングが成功し、リターントゥルー

>>> Path('a/b.py').match('*.py')
True
>>> Path('a/b/c.py').match('*.py')
True
>>> Path('a/b/c.py').match('b/*.py')
True
>>> Path('a/b/c.py').match('a/*.py')
False
>>> Path('a/b/c.py').match('a/**/.py')
False
>>> Path('a/b/c.py').match('a/**/*.py')
True
>>> Path('a/b/c.py').match('**/*.py')
True

ファイル操作
Pは、Path()=
p.open(MODE =「R&LT、緩衝= -1、エンコーディング=なし、エラー=なし、復帰改行=なし)
、組み込み関数類似の使用を開いているファイルオブジェクトを返す
ステートメントで使用することができます

with p.open('w') as f:
    pass

3.5追加された新機能の
p.write_text(コンテンツ)#あなたが空にを回すたびに、再データ
p.write_bytes(コンテンツ)#あなたは空に、書き換えデータ回すたびに
p.read_text()
p.read_bytesを()

おすすめ

転載: www.cnblogs.com/luckyleaf/p/12112792.html