Python のディレクトリとファイルの操作 (詳細)

基本的なファイル操作

ptyhon には組み込みのファイル オブジェクトがあり、ファイル オブジェクトを使用する場合は、組み込みの open() メソッドを使用してファイル オブジェクトを作成し、そのファイル オブジェクトに対していくつかの基本的な操作を実行できます。

ファイルの作成と終了

file = open(filename, mode='w', buffering=None, encoding=None)
 
# 参数说明
# file : 创建的文件对象
 
# filename : 要创建或者打开的文件名,需要以引号(单双都行,必须是英文的,还要加后缀)括起来,如打开或创建"name.txt"文件
 
# mode : 用于打开文件的模式,如 'w'是写入
 
# buffering : 用于指定读写文件的缓冲模式,默认为缓冲模式,
# buffering = False 表示不缓冲
# buffering = 数字(大于1) 表示缓冲大小
 
# encoding : 默认GBK编码打开文件,如果文件不是GBK编码会报错
# 大家可以指定编码打开文件 一般是常用'utf-8'编码

8f69e40ee4084fb0b9bb54a2ded1e5ef.png#pic_center

在这里插入代码片# 以写入模式创建文件对象,编码为utf-8
file = open('student.txt',mode='w',encoding='utf-8')
 
# 在创建或者打开一个文件后,一定要记着关闭,避免对文件数据造成损失
# 关闭文件可用close()
file.close()

ファイルの書き込みと読み取り

データ入力

# 方法使用
file = open('student.txt',mode='w',encoding='utf-8')
file.write(string)
# string : 要写入的数据
 
 
data = '人生苦短,我学python'
file = open('data.txt',mode = 'w', encoding = 'utf-8')
file.write(data)
file.close()
 
# 一定要注意!!!
# 写入文件后一定要用close()方法关闭,否则写入的内容会缺失
# 因为写入的内容会先进入缓存区,并没有直接写入,只有调用close()时才能保证内容全部写入
 
# 如果不想立马关闭文件,也可以用flush()方法把内容写入
# file.flush()

読み取りデータ

# 方法使用
file.read(size)
# size : 读取的字符个数,如果省略则读取所有
# 读取上面写入的内容
file = open('data.txt', mode='r', encoding='utf-8')
print(file.read(5))  # 人生苦短,
 
# 把剩下的内容读取完
print(file.read()) # 我学python
file.close()
 
 
# file.seek(offset)
# offset : 用于指定移动的字符数 跟read()有所不同,utf-8编码中汉字占三个字符,GBK编码汉字占(包括中文标点符号)2
# 个字符,无论采用何种编码英文字母和数字都是按一个字符计算。
file = open('data.txt', mode='r', encoding='utf-8')
file.seek(15)  # 人生苦短,
print(file.read(3))  # 我学p
file.close()
 
# file.readline() 读取一行
file = open('data.txt', mode='r', encoding='utf-8')
file.readline() # 人生苦短,我学python
file.close()
 
# file.realines() 读取全部行 跟read()差不多,但可以遍历
data = '人生苦短,我学python\n人生苦短,我学python'
 
file = open('data.txt', mode='w', encoding='utf-8')
file.write(data)
 
# 可以遍历
file = open('data.txt', mode='r', encoding='utf-8')
for i in file.readlines():
    print(i)
file.close()
 
 
 

コンテキストマネージャーでの使用

場合によっては、ファイルを開いた後、ファイルを閉じるのを忘れてしまい、データ損失やセキュリティ上の問題が発生する可能性があります。このような問題を回避するには、Python が提供する with ステートメントを使用します。コンテキスト マネージャーは、例外が発生したかどうかに関係なく、開いたファイルを閉じます。

# with open(file_name,mode,encoding) as f:
#   	f.write(string) # 执行读写的操作
# 其实没有什么变化 只增加了一个自动打开和关闭文件的操作
# as 表示重命名 
 
data = '人生苦短,我学python'
 
# 写入数据
with open('data.txt', mode='w', encoding='utf-8') as g:
    g.write(data)
 
# 读取数据
with open('data.txt', mode='r', encoding='utf-8') as f:
    print(f.read())
 
# 追加数据
with open('data.txt', mode='a', encoding='utf-8') as n:
    n.write(data)
 
 
 
 
 
 

ここで、ファイルを開くモードに注意するよう皆さんに思い出してください。
モードのモード 注意!
r ファイルを読み取ります。ファイルは存在する必要があります。存在しない場合は、エラーが報告されます。 a
コンテンツの最後に新しいコンテンツを追加します。 ファイルが存在する場合は、追加します。 ファイルが存在しない場合は、ファイルを作成して追加します。 w コンテンツを書き込みます
。ファイルが存在する、ファイル内にコンテンツが存在する、元のコンテンツは新しいコンテンツに置き換えられます 上書き、ファイルが存在しない場合はファイルを作成してから書き込みます

相対パスと絶対パス

os モジュールの操作を紹介する前に、まずファイル パスについて説明します。
コンピューターでは、ファイルは D:\Typora\resources\appsrc\editor などのディスクに保存されます。これはファイルの保存パスです。各セクションを区切るにはスラッシュ "\" がよく使用されます。スラッシュの後には前のサブ項目が続きます。

  • 相対パス 相対
    パスは、このファイルが配置されているパスによって引き起こされる他のファイル (またはフォルダー) とのパス関係を指します。たとえば、合計ディレクトリがあり、ファイル Student.txt がこのディレクトリに保存されている場合、このファイルを開くには「total \student.txt」を渡すことができます。相対パスは特定のファイルからの相対パスであり、変数です。
    Python では、「\」は特殊文字なのでエスケープする必要があり、2 つのバックスラッシュ「\」は 1 つのバックスラッシュ「\」と同じです。もちろん、「r」を使用してエスケープしたり、r"total\student.txt" のように文字列の前に「r」を使用したりすることもできます。
with open(r'total\student.txt',mode='w',encoding='utf-8') as f:
   f.write(data)
  • 絶対パス
    絶対パスは理解しやすいです。ファイルが保存されているパスです。通常はドライブ文字から始まり、D:\Thunder\Profiles\DownloadData のように、ドライブ文字から始まり、ターゲット ファイルに直接進みます。 。

OSモジュール操作ディレクトリ

Pythonではディレクトリやファイルの操作に組み込みモジュールosとサブモジュールos.pathを使用しますが、osモジュールを使用する場合は忘れずにインポートしてください。
5f21031b42b9487d80747cad63ba6f70.png#pic_center

7574ffa8bf374bf79736aa42691a1028.png#pic_center

ディレクトリとパスの連結を作成する

  • ディレクトリを作成する
import os
 
# mkdir(name) name为要创建的文件名
# 文件存在就会报错
os.mkdir('name')
  • 複数レベルのディレクトリを作成する
import os
 
# makedirs(path1\path2......) 要\\ 或者字符串前面加r
os.makedirs(r'name\name1\name2')
os.makedirs('names\\names1\\names2')
 

5fe8e537d988480d99f59ba07886bb8c.png#pic_center

  • パスステッチ
import os.path
 
# os.path.join(name1,name2...) 如果有多个盘符开头的路径 以最后的为准
# 拼接不会检查路径是否有效
name1 = 'D:\\Users\\wo\\top'
name2 = 'names'
print(os.path.join(name1, name2))
# D:\Users\wo\top\names
 
name3 = 'C:\\u'
name4 = 'name2'
print(os.path.join(name1, name2, name3, name4))
# C:\u\name2
 

ディレクトリまたはファイルの絶対パスを取得します

  • 現在のファイルパスを返します
import os
 
# getcwd()返回当前文件的绝对路径
print(os.getcwd())
 
  • 指定したファイルまたはディレクトリの絶対パスを取得します
import os.path
 
# os.path.abspath(name) name 获取的文件名
print(os.path.abspath('names'))
 
# C:\Users\政\Desktop\文件夹操作\names

ファイルまたはディレクトリのパスが有効かどうかを判断する

import os.path
 
# os.path.isdir(name) name为文件名 相对与绝对路径都行
print(os.path.isdir('names'))
 
# os.path.isfile(name) name为文件名 相对与绝对路径都行
print(os.path.isfile('data.txt'))
 

ファイルが存在するかどうかを確認し、指定されたディレクトリ内のすべてのファイル名を取得します

  • ファイルが存在するかどうかを確認する
import os.path
# 先创建目录
os.mkdir('name')
 
# 判断目录或文件是否存在 存在返回True 不存在返回False
# 相对与绝对路径都可以
print(os.path.exists('name'))
  • 指定したディレクトリ内のすべてのファイル名を取得します
import os
 
# 获取当前目录的路径
file_add = os.getcwd()
 
# os.listdir(path) 
# 获取指定目录下的所有文件
print(os.listdir(file_add))
 

ディレクトリとファイルを削除する

 
import os
 
# 先创建目录
os.mkdir('name')
os.makedirs('name1\\name2\\name3')
 
# 再删除目录
# os.rmdir(name) name为目录名
os.rmdir('name')
 
# 删除多级目录
# os.removedirs(path1\path2......)
os.removedirs('name1\\name2\\name3')
 

ファイルとディレクトリの名前を変更する

import os
 
# 创建目录
os.mkdir('name')
 
# 在目录name中创建文件name1
with open('name\\name1', mode='w') as f:
    f.write('a')  # 写入字符串'a'
 
# os.rename(str,dst) str要重命名的文件 dst要命名的文件名字
# 重命名目录
os.rename('name', 'student')
os.rename('student\\name1', 'student1')
 

ディレクトリをトラバースする

import os
 
# 创建一个根目录
os.mkdir('a')
# 在根目录创建3个在目录
for i in range(3):
    os.mkdir(f'a\\name{
      
      i}')
    # 在每一个子目录创建3个文件
    for k in range(0, 3):
        with open(f'a\\name{
      
      i}\\' + f'age{
      
      k}.txt', mode='w') as f:
            f.write('')
 
# os.path.walk(top,topdown)
# top 指定遍历的目录
# topdown 用与指定遍历的顺序,如果值为True 则优先遍历根目录(自上而下)
# 如果值为False,先从最后一级目录开始(自下而上) 默认为True
 
for g in os.walk('a'):
    print('路径:', g[0])
    print('目录名:', g[1])
    print('文件名:', g[2])
 

その他の操作

  • ファイル名を拡張子から分離する
import os.path
 
# os.path.splitext() 分离文件名与扩展名
 
name = 'file.txt'
print(os.path.splitext(name))
  • ディレクトリからファイル名を抽出する
import os.path
 
# os.path.basename(path) path 为目录路径
 
name = 'name\\file.txt'
print(os.path.basename(name))
 
  • パスからファイル名を除いたファイルパスを抽出します。
import os.path
 
# os.path.dirname(path) path 为目录路径
 
name = 'name\\file.txt'
print(os.path.dirname(name))
 

要約する

この記事では、Python の組み込み関数 open を使用して読み書き可能なファイルを作成すること、組み込みモジュール os を使用してファイル、ディレクトリ、およびファイルとディレクトリに対するいくつかの基本操作を作成すること、および with を使用してファイルを自動的に開閉することについて説明します。 。普段の練習では、たくさん練習すればよく、これらの方法をすべて覚える必要はなく、確認して練習すれば自然とすべて覚えられます。記事に間違いがあれば修正してください。最後に皆さん、ありがとうございました!

おすすめ

転載: blog.csdn.net/qq_65898266/article/details/124875850