python Task9スタディノート8.8(54時の時間-QQ)

Task9ファイルとファイルシステムファイルを
開く:
open(file、mode = 'r'、buffering = None、encoding = None、errors = None、newline = None、closefd = True)ファイルを開いてストリームを返します。失敗するとOSErrorを発生させます。
ファイル:必須、ファイルパス(相対パスまたは絶対パス)
モード:オプション、ファイルオープンモード
バッファリング:バッファ
エンコーディングの設定:通常はutf8
エラーを使用:エラーレベル改行:改行文字の区別
一般的なモードは次
とおりです:'r':読み取り専用開く方法ファイル。ファイルのポインタはファイルの先頭に配置されます。これがデフォルトのモードです。
'w':書き込み専用のファイルを開きます。
ファイルがすでに存在する場合は、ファイルを開いて最初から編集を開始します。
つまり、元のコンテンツは削除されます。
ファイルが存在しない場合は、新しいファイルを作成します。
'x':書き込みモード、新しいファイルを作成します。ファイルがすでに存在する場合は、エラーが報告されます。
'a':追加モード。追加するファイルを開きます。
ファイルがすでに存在する場合、ファイルポインタはファイルの最後に配置されます。
つまり、新しいコンテンツは既存のコンテンツの後に書き込まれます。
ファイルが存在しない場合は、書き込み用に新しいファイルを作成します。
'b':ファイルをバイナリモードで開きます。通常、画像などの非テキストファイルに使用されます。
't':テキストモードで開きます(デフォルト)。通常、txtなどのテキストファイルに使用されます。
'+':読み取りおよび書き込みモード(他のモードに追加できます)

ファイルを開いてファイルオブジェクトを返します。ファイルを開くことができない場合、OSErrorがスローされます。

f = open('将进酒.txt')
print(f)
# <_io.TextIOWrapper name='将进酒.txt' mode='r' encoding='cp936'>

for each in f:
    print(each)

# 君不见,黄河之水天上来,奔流到海不复回。
# 君不见,高堂明镜悲白发,朝如青丝暮成雪。
# 人生得意须尽欢,莫使金樽空对月。
# 天生我材必有用,千金散尽还复来。
# 烹羊宰牛且为乐,会须一饮三百杯。
# 岑夫子,丹丘生,将进酒,杯莫停。
# 与君歌一曲,请君为我倾耳听。
# 钟鼓馔玉不足贵,但愿长醉不复醒。
# 古来圣贤皆寂寞,惟有饮者留其名。
# 陈王昔时宴平乐,斗酒十千恣欢谑。
# 主人何为言少钱,径须沽取对君酌。
# 五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。

ファイルオブジェクトメソッド
fileObject.close()は、開いているファイルを閉じるために使用されます。閉じたファイルの読み取りまたは書き込みができなくなります。そうしないと、ValueErrorがトリガーされます。
fileObject.read([size])は、指定された文字数をファイルから読み取るために使用されます。指定されていないか負の場合は、すべて読み取ります。

f = open('将进酒.txt', 'r')
line = f.read(20)
print("读取的字符串: %s" % line)
# 读取的字符串: 君不见,黄河之水天上来,奔流到海不复回。

f.close()

fileObject.readline()は、「\ n」文字を含む行全体を読み取ります。

f = open('将进酒.txt', 'r')
line = f.readline()
print("读取的字符串: %s" % line)
# 读取的字符串: 君不见,黄河之水天上来,奔流到海不复回。
f.close()

fileObject.readlines()は、すべての行を読み取り(終了文字EOFまで)、リストを返すために使用されます。リストは、Pythonのfor ... in ...構造で処理できます。

f = open('将进酒.txt', 'r')
lines = f.readlines()
print(lines)

for each in lines:
    each.strip()
    print(each)

# 君不见,黄河之水天上来,奔流到海不复回。
# 君不见,高堂明镜悲白发,朝如青丝暮成雪。
# 人生得意须尽欢,莫使金樽空对月。
# 天生我材必有用,千金散尽还复来。
# 烹羊宰牛且为乐,会须一饮三百杯。
# 岑夫子,丹丘生,将进酒,杯莫停。
# 与君歌一曲,请君为我倾耳听。
# 钟鼓馔玉不足贵,但愿长醉不复醒。
# 古来圣贤皆寂寞,惟有饮者留其名。
# 陈王昔时宴平乐,斗酒十千恣欢谑。
# 主人何为言少钱,径须沽取对君酌。
# 五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。

f.close()

fileObject.tell()は、ファイルの現在の位置、つまりファイルポインタの現在の位置を返します。

f = open('将进酒.txt', 'r')
line = f.readline()
print(line)
# 君不见,黄河之水天上来,奔流到海不复回。
pos = f.tell()
print(pos)  # 42
f.close()

fileObject.seek(offset [、whence])は、ファイル読み取りポインターを指定された位置に移動するために使用されます。オフセット:開始オフセット、つまり移動する必要のあるバイト数。負の数の場合は、最後の数桁から開始することを意味します。whence:オプション。デフォルト値は0です。オフセットのパラメータを定義して、オフセットを開始する位置を示します。0はファイルの先頭からカウントすることを意味し、1は現在の位置からカウントすることを意味し、2はファイルの末尾からカウントすることを意味します。

f = open('将进酒.txt', 'r')
line = f.readline()
print(line)
# 君不见,黄河之水天上来,奔流到海不复回。
line = f.readline()
print(line)
# 君不见,高堂明镜悲白发,朝如青丝暮成雪。
f.seek(0, 0)
line = f.readline()
print(line)
# 君不见,黄河之水天上来,奔流到海不复回。
f.close()

fileObject.write(str)は、指定された文字列をファイルに書き込むために使用され、返された文字の長さが書き込まれます。

f = open('workfile.txt', 'wb+')
print(f.write(b'0123456789abcdef'))  # 16
print(f.seek(5))  # 5
print(f.read(1))  # b'5'
print(f.seek(-3, 2))  # 13
print(f.read(1))  # b'd'

ファイルを閉じる前、またはバッファを更新する前に、文字列の内容がバッファに保存されます。現時点では、ファイルに書き込まれた内容を確認することはできません。ファイルオープンモードがbの場合、ファイルコンテンツを書き込むときに、str(パラメータ)をencodeメソッドを使用してバイト形式に変換する必要があります。そうしないと、エラーが報告されます。TypeError:バイトのようなオブジェクトが必要です。 str '。

fileObject.writelines(sequence)は、シーケンス文字列のリストをファイルに書き込みます。行を折り返す必要がある場合は、行ごとに改行文字\ nを追加する必要があります。といった:

f = open('test.txt', 'w+')
seq = ['小马的程序人生\n', '老马的程序人生']
f.writelines(seq)
f.seek(0, 0)
for each in f:
    print(each)
    
# 小马的程序人生
# 老马的程序人生
f.close()

簡潔なステートメント
一部のオブジェクトは、システムが正常に使用したかどうかに関係なく、標準のクリーンアップ動作を定義します。不要になると、この標準のクリーンアップ動作が実行されます。キーワードwithステートメントは、ファイルなどのオブジェクトが使用後にクリーンアップメソッドを正しく実行することを保証できます。

try:
    f = open('myfile.txt', 'w')
    for line in f:
        print(line)
except OSError as error:
    print('出错啦!%s' % str(error))
finally:
    f.close()

# 出错啦!not readable

このコードの実行後、処理中に問題が発生した場合でも、ファイルfは常に閉じられます。

try:
    with open('myfile.txt', 'w') as f:
        for line in f:
            print(line)
except OSError as error:
    print('出错啦!%s' % str(error))

# 出错啦!not readable    

2. OSモジュールでファイル/ディレクトリの一般的に使用される機能は、
一般的に使用されるオペレーティングシステムです:Windows、Mac OS、Linu、Unixなど。これらのオペレーティングシステムの基本的な動作原理は、ファイルシステムアクセスによって異なります。さまざまなシステムに使用するファイルシステムモジュールを検討する必要があります...このアプローチは、プログラムのオペレーティング環境が変更されたときに、それに応じて多数のモジュールを変更する必要があるため、非常に不親切で面倒です。応答するコード。OS(オペレーティングシステム)モジュールを使用すると、どのオペレーティングシステムでどのモジュールが使用されているかを気にする必要がありません。OSモジュールは、正しいモジュールを選択して呼び出すのに役立ちます。
os.getcwd()は、現在の作業ディレクトリを返すために使用されます。
os.chdir(path)は、現在の作業ディレクトリを指定されたパスに変更するために使用されます。

import os

path = 'C:\\'
print("当前工作目录 : %s" % os.getcwd())
# 当前工作目录 : C:\Users\Administrator\PycharmProjects\untitled1
os.chdir(path)
print("目录修改成功 : %s" % os.getcwd())
# 目录修改成功 : C:\

listdir(path = '。')は、pathで指定されたフォルダーに含まれるファイルまたはフォルダーの名前のリストを返します。

import os

dirs = os.listdir()
for item in dirs:
    print(item)

os.mkdir(path)は単一レベルのディレクトリを作成し、ディレクトリがすでに存在する場合は例外をスローします。

import os

if os.path.isdir(r'.\b') is False:
    os.mkdir(r'.\B')
    os.mkdir(r'.\B\A')

os.mkdir(r'.\C\A') # FileNotFoundError

os.makedirs(path)は、マルチレベルディレクトリを再帰的に作成するために使用されます。ディレクトリがすでに存在する場合は、例外がスローされます。

os.remove(path)は、指定されたパス内のファイルを削除するために使用されます。指定されたパスがディレクトリの場合、OSErrorがスローされます。
たとえば、最初に。\ E \ A \ text.txtファイルを作成してから、削除します。

import os

print("目录为: %s" % os.listdir(r'.\E\A'))
os.remove(r'.\E\A\test.txt')
print("目录为: %s" % os.listdir(r'.\E\A'))

os.rmdir(path)は、単一レベルのディレクトリを削除するために使用されます。このフォルダが空の場合のみ、それ以外の場合はOSErrorがスローされます。

import os

print("目录为: %s" % os.listdir(r'.\E'))
os.rmdir(r'.\E\A')
print("目录为: %s" % os.listdir(r'.\E'))

os.removedirs(path)は、ディレクトリを再帰的に削除し、サブディレクトリから親ディレクトリにレイヤーごとに削除しようとします。ディレクトリが空でない場合は、例外をスローします。
たとえば、最初に。\ E \ Aディレクトリを作成してから、削除します。

import os

print("目录为: %s" % os.listdir(os.getcwd()))
os.removedirs(r'.\E\A')  # 先删除A 然后删除E
print("目录为: %s" % os.listdir(os.getcwd()))

os.rename(src、dst)メソッドは、ファイルまたはディレクトリにsrcからdstまでの名前を付けるために使用されます。dstが既存のディレクトリの場合、OSErrorがスローされます。

test.txtファイルの名前をtest2.txtに変更します。

import os

print("目录为: %s" % os.listdir(os.getcwd()))
os.rename("test.txt", "test2.txt")
print("重命名成功。")
print("目录为: %s" % os.listdir(os.getcwd()))

os.system(command)は、システムのシェルコマンドを実行します(文字列をコマンドに変換します)。
最初にそれ自体でa.pyファイルを作成し、次にシェルコマンドで開きます。

import os

path = os.getcwd() + '\\a.py'
a = os.system(r'python %s' % path)

os.system('calc')  # 打开计算器

os.curdirは現在のディレクトリを参照します(。)
os.pardirは上位レベルのディレクトリを参照します(...)
os.sepはオペレーティングシステム固有のパスセパレータを出力します(\ under win、/ under Linux)os.linesep is現在のプラットフォームで使用されているラインターミネータ(winでは\ r \ n、Linuxでは\ n)os.nameは、現在使用されているオペレーティングシステム(「mac」、「nt」を含む)を参照します。

import os

print(os.curdir)  # .
print(os.pardir)  # ..
print(os.sep)  # \
print(os.linesep)
print(os.name)  # nt

os.path.basename(path)は、ディレクトリパスを削除し、ファイル名のみを返しますos.path.dirname(path)は、ファイル名を削除し、ディレクトリパスのみを返しますos.path.join(path1 [、path2 [、…] ])will path1、path2の各部分がパス名os.path.split(path)に結合されて、ファイル名とパスが分割され、(f_path、f_name)タプルが返されます。ディレクトリが完全に使用されている場合は、最後のディレクトリがファイル名として分離され、ファイルまたはディレクトリが存在するかどうかは判別されません。
os.path.splitext(path)は、ファイル名と拡張子を区切り、(f_path、f_name)のタプルを返します。

import os

# 返回文件名
print(os.path.basename(r'C:\test\lsgo.txt'))  # lsgo.txt
# 返回目录路径
print(os.path.dirname(r'C:\test\lsgo.txt'))  # C:\test
# 将目录和文件名合成一个路径
print(os.path.join('C:\\', 'test', 'lsgo.txt'))  # C:\test\lsgo.txt
# 分割文件名与路径
print(os.path.split(r'C:\test\lsgo.txt'))  # ('C:\\test', 'lsgo.txt')
# 分离文件名与扩展名
print(os.path.splitext(r'C:\test\lsgo.txt'))  # ('C:\\test\\lsgo', '.txt')

os.path.getsize(file)は、指定されたファイルのサイズをバイト単位で返します。os.path.getatime(file)は、指定されたファイルの最終アクセス時刻を返しますos.path.getctime(file)は、指定されたファイルの作成時刻を返しますos.path.getmtime(file)は、指定されたファイルの最新の変更時刻を返します浮動小数点秒単位で、タイムモジュールのgmtime()またはlocaltime()関数で変換できます

import os
import time

file = r'.\lsgo.txt'
print(os.path.getsize(file))  # 30
print(os.path.getatime(file))  # 1565593737.347196
print(os.path.getctime(file))  # 1565593737.347196
print(os.path.getmtime(file))  # 1565593797.9298275
print(time.gmtime(os.path.getctime(file)))
# time.struct_time(tm_year=2019, tm_mon=8, tm_mday=12, tm_hour=7, tm_min=8, tm_sec=57, tm_wday=0, tm_yday=224, tm_isdst=0)
print(time.localtime(os.path.getctime(file)))
# time.struct_time(tm_year=2019, tm_mon=8, tm_mday=12, tm_hour=15, tm_min=8, tm_sec=57, tm_wday=0, tm_yday=224, tm_isdst=0)

os.path.exists(path)は、指定されたパス(ディレクトリまたはファイル)が存在するかどうかを判別します
os.path.isabs(path)は、指定されたパスが絶対パスであるかどうかを判別しますos.path.isdir(path)は、指定されたパスが存在するかどうかを判別しますos.path.isfile(path)は、指定されたパスが存在するかどうかを判断し、ファイルですos.path.islink(path)は、指定されたパスが存在するかどうかを判断し、シンボリックリンクですos.path.ismount(path)は判断します指定されたパスが存在し、ハングポイントであるかどうかos.path.samefile(path1、path2)は、2つのパスpath1とpath2が同じファイルを指すかどうかを決定します。3。
シリアル化と逆シリアル化
Pythonのpickleモジュールは、基本的なデータシーケンスと逆シリアル化を実装します。
pickleモジュールのシリアル化操作により、プログラムで実行されているオブジェクト情報をファイルに保存して永続的に保存できます。
pickleモジュールの逆シリアル化操作により、最後のプログラムで保存されたオブジェクトをファイルから作成できます。pickleモジュールで最も一般的に使用される関数は次のとおりです。pickle.dump(obj、file、[、protocol])は、objオブジェクトを開いたファイルにシリアル化します。
obj:シリアル化するobjオブジェクト。file:ファイル名。
プロトコル:シリアル化に使用されるプロトコル。この項目を省略すると、デフォルトで0になります。負またはHIGHEST_PROTOCOLの場合、最も高いプロトコルバージョンが使用されます。pickle.load(file)ファイル内のオブジェクトをシリアル化して読み取ります。file:ファイル名。

import pickle

dataList = [[1, 1, 'yes'],
            [1, 1, 'yes'],
            [1, 0, 'no'],
            [0, 1, 'no'],
            [0, 1, 'no']]
dataDic = {
    
    0: [1, 2, 3, 4],
           1: ('a', 'b'),
           2: {
    
    'c': 'yes', 'd': 'no'}}

# 使用dump()将数据序列化到文件中
fw = open(r'.\dataFile.pkl', 'wb')

# Pickle the list using the highest protocol available.
pickle.dump(dataList, fw, -1)

# Pickle dictionary using protocol 0.
pickle.dump(dataDic, fw)
fw.close()

# 使用load()将数据从文件中序列化读出
fr = open('dataFile.pkl', 'rb')
data1 = pickle.load(fr)
print(data1)
data2 = pickle.load(fr)
print(data2)
fr.close()

# [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
# {0: [1, 2, 3, 4], 1: ('a', 'b'), 2: {'c': 'yes', 'd': 'no'}}

練習問題:
1。Pythonに付属のオープンファイルでテキストエンコーディングを指定できます。エンコーディングでは、
open(file、mode = 'r'、buffering = None、encoding = None、errors = None、newline = None 、closefd = True)コーディング

おすすめ

転載: blog.csdn.net/m0_45672993/article/details/107881803