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'编码
在这里插入代码片# 以写入模式创建文件对象,编码为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)
在这里提醒大家一定要注意文件打开的模式!!!
mode的模式注意!!!
r 读取文件,文件必须存在,否则会报错
a 往内容后面追加新内容 文件存在就添加 不存在就创建文件再添加
w 写入内容 如果文件存在,文件里有内容,原来的内容会被新内容覆盖, 不存在就创建文件再写入
在介绍os模块操作之前,先讲一下文件路径,什么是路径呢?
在电脑中,我们的文件会储存再磁盘中,如D:\Typora\resources\appsrc\editor,就是一个文件的储存路径,常用斜杠“\”分隔每一个区间,斜杠后面是前面的子项。
with open(r'total\student.txt',mode='w',encoding='utf-8') as f:
f.write(data)
在python中,用内置模块os以及子模块os.path用于对目录和文件进行操作,在使用os模块记得用import导入。
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')
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自动打开关闭文件。在平常的练习中大家可以多多练习,不一定要把这些方法都记下来,多查多练,自然而然都记住了。文章如有错误,请指正,最后谢谢大家!