Pythonの基礎08~ファイル操作を詳しく解説

ゼロ、記事ディレクトリ

Pythonの基礎08~ファイル操作を詳しく解説

1. ファイル操作の概要

(1) ファイルとは
  • メモリに保存されたデータは、コンピュータをシャットダウンすると消去されます。データを長期間保存するには、ハードディスク、光ディスク、USBディスクなどを使用する必要があります。データの管理と検索を容易にするために、「ファイル」の概念が導入されています。

  • 記事、ビデオ、実行可能プログラムはすべてファイルとして保存し、ファイル名を付けることができます。オペレーティングシステムは、ディスク上のデータをファイル単位で管理します。一般に、== ファイルは、テキスト ファイル、ビデオ ファイル、オーディオ ファイル、画像ファイル、実行可能ファイルなどのさまざまなカテゴリに分類できます。

画像-20231120154443232

(2) ファイルに対してどのような操作が行われますか?
  • 日常生活において、ファイル操作には主に、開く、閉じる、読み取り、書き込み、バックアップなどの操作が含まれます。
(3) ファイル操作の役割
  • ファイル操作の機能は、コンテンツ (データ) を保存し、次回プログラムを実行するときに新しいコピーを作成せずに直接使用できるようにすることで、時間と労力を節約します。
  • 簡単に言えば、データの永続化を実現することです。

2. ファイルの基本操作

(1) ファイル操作手順
  • ① ファイルを開く
  • ② ファイルの読み書き
  • ③ ファイルを閉じる
(2) open() 関数を開きます
  • Python では、open 関数を使用して、既存のファイルを開いたり、新しいファイルを作成したりできます。構文: open(name, mode)

    • name: 開くターゲット ファイルの名前の文字列です (ファイルが存在する特定のパスを含めることができます)。
    • mode: ファイルを開くためのモード (アクセス モード) を設定します: 読み取り専用、書き込み、追加など。
  • ファイルパス:①絶対パス②相対パス

    • ① 絶対パス: 絶対パスは絶対的な概念を表し、通常はドライブ文字から開始して、アクセスしたいファイルが見つかるまで 1 レベルずつ下方向に検索します (レベルをスキップすることはありません)。
    • ② 相対パス: 相対パスは相対的な概念を表します。ドライブ文字から開始する必要はありません。まず、参照点 (Python ファイル自体) を見つける必要があります。
      • 兄弟関係: アクセスしたいファイルは Python コードと同じディレクトリにあります。これは並列関係です。兄弟関係にアクセスするには、./文件名称 を使用するか、次のように記述します。直接文件名称それだけです
      • 上位の関係: アクセスしたいファイルが現在の Python コードの上位レベルのディレクトリにある場合、../ を介して上位レベルのパスにアクセスできます (マルチレベル、また.../.../.../ を通じてレイヤーごとにアクセスできます。
      • 従属関係: アクセスしたいファイルが Python コードと同じレベルのフォルダーにある場合、文件夹名称/あ>
(3) モードアクセスモードの詳細説明

画像-20231120162401489

(4) 書き込み動作のクイックスタート
'''
文件操作三步走:① 打开文件 ② 读写文件 ③ 关闭文件
① 打开文件 => open(name, mode)
name = 代表要打开的文件路径 + 名称
mode代表访问模式,只需要记住三种模式即可 => r/w/a
r : read,只读模式,代表只能对文件进行读取,属于默认模式,如果要访问的文件不存在,则直接报错!
w : write,只写模式,代表只能对文件进行写入操作,如果访问的文件不存在,则系统会自动创建,但是写入文件时,
它首先要把文件内容清空,然后再写入新内容。
a : append,追加模式(只写模式的一种),与w类似,如果访问的文件不存在,也可以自动创建该文件。
但是在写入数据到文件时,其并不会清空文件的原有内容。
注意:open方法操作完成后,返回的是一个文件对象(对象的概念后面会学,也可以叫做文件句柄)
以后的读写都需要依赖这个对象(句柄)
② 写内容到文件 => f.write(content) => f.write()只能把字符串类型的数据写入到文件中
③ 关闭文件(为什么要关闭文件 => 因为文件打开以后需要占用计算机资源)
f.close()
'''
# 1、打开文件
f = open('python.txt', 'w')
# 2、写入内容到文件
f.write('Life is Short, I Study Python!')
# 3、关闭文件
f.close()
(4) 漢字文字化け問題を解決
  • 開くときに文字セットencoding='utf-8'を指定すると、プログラムは指定された文字セットに従って読み書きできるようになります。
'''
乱码是如何产生的?把这个原因说清楚!
大多数编程语言都是老外开发的,对中文的支持并不好。最早美国搞出了一套编码格式 => ASCII => 1字节 => 8bit
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
2的8次方 => 主要能表达255个字符(主要包括了0-9,a-z,A-Z,老外字符)
随着编程语言和互联网发展,语言传入国内了,发现255个字符根本装不了汉字。所以就会产生所谓的乱码!
中国推出了自己的编码格式 => GB2312 => 比较广,传统255个字符 + 汉字支持 => GBK
中国台湾 => 喜欢使用繁体中文 => Big5
国际化组织受不了,每开一个系统,兼容所有语言 => 开发好几套系统 => 编码标准unicode => UTF-8
'''
# 1、打开文件
f = open('python.txt', 'w', encoding='utf-8')
# 2、写入内容到文件
f.write('人生苦短,我学Python!')
# 3、关闭文件
f.close()
(5) リード操作関連メソッド
  • read(): ファイルのすべての内容を読み取ります。読み取る文字の長さを表すパラメータ size を追加できます。num が渡されない場合は、ファイル内のすべてのデータを読み取ることを意味します。
  • readlines(): ファイルのすべての内容を一度に読み取ります。返される結果はリストです。リスト内の各要素はファイル内の 1 行です。
  • readline(): 一度にファイルの 1 行を読み取り、ファイルが読み取られるまで、一度読み取ったら逆方向に進みます。単独で使用されることはほとんどありません。通常は while と組み合わせて使用​​されます。
'''
文件读取也要分为三步走:
① 打开文件 f = open()
② 读取文件
③ 关闭文件 f.close()
在Python代码中,文件读取一共有3种方法:
read() : 读取文件的所有内容,可以添加一个参数size,代表读取字符长度
readlines() : 一次性读取文件的所有内容,返回结果是一个列表,列表中的每一个元素都是文件中的一行
readline() : 一次读取文件的一行,读取一次向后移动一次,直到文件读取完毕,很少自己使用,通常要配合while True
'''
# 1、第一种方法
# f = open('python.txt', 'r', encoding='utf-8')
# # content = f.read()  # 读取文件所有内容
# content = f.read(1)   # 代表只读取文件中的一个字符
# print(content)
# f.close()

# 2、第二种写法
# f = open('python.txt', 'r', encoding='utf-8')
# content = f.readlines()
# print(content)
# f.close()

# 3、第三种写法
f = open('python.txt', 'r', encoding='utf-8')
while True:
    content = f.readline()
    # 判断,如果读取不到任何内容,则结束循环
    if not content:
        break
    # 反之,如果没有执行break,则代表文件中还有内容
    print(content, end='')

print(content)
f.close()
(6) ファイルバックアップの場合
  • 要件: ユーザーは、現在のディレクトリに任意のファイル名を入力して、ファイルのバックアップ機能を完了します (バックアップ ファイル名は xx [backup] 接尾辞です。例: test [backup].txt)。
'''
需求:用户输入当前目录下任意文件名,完成对该文件的备份功能(备份文件名为xx[备份]后缀,例如:(test[备份].txt)。
① 命名变化:test.txt => 备份 => test[备份].txt
② 内容变化:需要把旧文件中的内容完全拷贝到新文件中
分析:命名变化如何实现
test.txt => test[备份].txt?
☆ 提示用户输入要备份的文件名称
☆ 分别获取文件的名称以及文件的后缀 => (文件名 => test 后缀 => .txt)
☆ 重新拼接新文件 test + [备份] + .txt
新方法:rfind()方法,从左向右查找,返回这个关键词在最后一次出现的位置
test.abc.txt

分析:文件内容变化
旧文件 => 读取操作
新文件 => 写入操作
把旧文件的内容全部读取出来写入到新文件中,但是文件如果比较大,考虑使用read或readline
'''
oldname = input('请输入您要备份的文件名称:')
# oldname = 'test.txt',拆解文件名与文件的后缀
index = oldname.rfind('.')
# 获取文件名称
filename = oldname[:index]  # test
postfix = oldname[index:]   # .txt
# 拼接新文件名称
newname = filename + '[备份]' + postfix

# 创建old_f文件句柄与new_f文件句柄
old_f = open(oldname, 'rb')
new_f = open(newname, 'wb')
while True:
    content = old_f.read(1024)  # r模式size代表字符长度,rb模式size代表字节大小 => 1KB
    if not content:
        break
    new_f.write(content)
# 操作完成后,关闭文件
old_f.close()
new_f.close()

3. ファイルとフォルダーの操作

(1)OSモジュール
  • Python でファイルやフォルダーを操作するには、os モジュール内の関連する関数を使用する必要があります。具体的な手順は次のとおりです。
  • ①OSモジュールをインポートする
import os
  • ②osモジュールの関連機能も利用する
os.函数()
(2) ファイル操作に関するメソッド
  • os.rename (古いファイル名、新しいファイル名): ファイルの名前を変更します。
  • os.remove (削除するファイル名): ファイルを削除します。
'''
os.rename(旧文件名称, 新文件名称)
os.remove('要删除的文件名称')

案例:把Python项目目录下的python.txt文件,更名为linux.txt,查看效果后,对文件进行删除操作。
'''
# 1、导入os模块
import os

# 2、对python.txt重命名为linux.txt
if os.path.exists('python.txt'):
    os.rename('python.txt', 'linux.txt')

# 3、把linux.txt移除
os.remove('linux.txt')
(3) フォルダ操作に関するメソッド
  • os.mkdir (新しいフォルダー名): 指定した名前でフォルダーを作成します
  • os.getcwd(): 現在の作業ディレクトリ、現在のディレクトリ名を取得します。
  • os.chdir (切り替え後のディレクトリ名): ディレクトリを変更、ディレクトリを切り替え
  • os.listdir (ターゲットディレクトリ): 指定されたディレクトリ内のファイル情報を取得し、リストを返します。
  • os.rmdir (ターゲットディレクトリ): 指定された名前の「空の」フォルダーを削除するために使用されます。
'''
import os模块

os.mkdir() 创建一个文件夹
os.getcwd() 获取当前程序工作目录
os.chdir()  =>  change directory,切换目录
os.listdir() => list directory,以列表形式展现一个目录下的所有文件信息
os.rmdir()  =>  remove directory,移除目录(删除文件夹,缺点:只能删除空文件夹)

案例:准备一个static文件夹以及file1.txt、file2.txt、file3.txt三个文件
① 在程序中,将当前目录切换到static文件夹
② 创建一个新images文件夹以及test文件夹
③ 获取目录下的所有文件
④ 移除test文件夹
'''
import os

# 1、我目前在什么位置
print(os.getcwd())
# 2、把当前工作目录切换到static文件夹
os.chdir('static')
# 3、创建images与test文件夹
if not os.path.exists('images'):
    os.mkdir('images')
if not os.path.exists('test'):
    os.mkdir('test')
# 4、获取一个目录下的所有文件
files = os.listdir()
print(files)
# 5、删除目录
if os.path.exists('test'):
    os.rmdir('test')
(4) 空でないディレクトリを再帰的に削除する(注意)
'''
Ctrl + 鼠标左键点击一下模块,可以打开模块底层代码
'''
import shutil

shutil.rmtree('static')

おすすめ

転載: blog.csdn.net/liyou123456789/article/details/135039314