文件的简单操作:
1.读取文件:
# file 变量名称------> 文件句柄,文件对象 是一个可迭代的内容
file = open('file/a.txt', mode='r')
ret = file.read() # 将文件中的内容一次性的提取出来 read后可以规定读取字符个数
print(ret)
# 关闭文件
file.close()
2.写文件:
file = open('file/a.txt', mode='w')
ret = file.write('ASD') # 会将原来文本中的内容覆盖
print(ret)
file.close()
mode='w' 表示写文件
注意:如果文件不存在,会自动创建文件(不会创建目录)
3.读操作:
readline():readline每次读取一行,并且自带换行功能 每一行末尾会读到\n
readlines():一次性以行的形式读取文件的所有内容并返回一个list,需要去遍历读出来
file = open('file/d.txt')
ret = file.readlines()
print(ret) # ['asdfz1']
循环读取:file句柄是一个可迭代的对象因此,可以循环读取文件中的内容,每次读一行。
file = open('file/b.txt')
for line in file:
print(line)
4.写操作:
writelines:file.writelines(seq) #把seq的内容全部写到文件中(多行一次性写入)。
file = open('file/b.txt', mode='w')
lst = ['aa', 'bb', 'cc']
file.writelines(lst)
file.close()
其他操作:
查看光标位置:
file = open('file/b.txt', mode='r')
ret = file.read(3)
pop = file.tell()
print(pop) # 3
移动光标位置:
seek移动光标位置
参数:
offset 移动的长度(字节)
whence 相对位置 0从开头(默认),1从当前,2从末尾
with:可以不用关闭文件,会自动关闭文件
with open('file/a.txt', mode='r') as f:
ret = f.read()
print(ret)
os模块:
os 模块提供了很多操作目录与文件的功能,主要对文件文件夹增删改查操作
import os
# 重命名
# src 源文件路径,dst 重命名后的文件路径
os.rename('file/text.txt', 'file/text.txt')
# 重命名所有路径
# old 原路径,new 新路径
os.renames('file/text.txt', 'fil2/text2.txt')
# 删除文件
# 如果path不是一个文件,或者文件不存在,将会产生FileNotFoundError异常
os.remove('file/text.txt')
# 新建文件夹
# 如果path所在父母了不存在,或者path目录已存在,都会产生FileNotFoundError或FileExistsError异常
os.mkdir('file/new_dir')
# 删除文件夹
# path必须是空目录,否则产生OSError异常
os.rmdir('file/new_dir')
# 创建多级目录
# 如果path所在的父目录不存在,则会连同父目录一同创建。
# 如果path目录已经存在,当exist_ok值为False,会产生FileExistsError异常,如果exist_ok值为True,则不会产生异常(默认值为False)
os.makedirs('file/new1/new2/new3', exist_ok=True)
# 删除多级目录
os.removedirs('file/new1/new2/new3')
# 获取当前目录
cur_dir = os.getcwd()
print(cur_dir)
# 改变目录
os.chdir('../')
cur_dir = os.getcwd()
print(cur_dir)
# 获取目录列表
dir_list = os.listdir('.')
print(dir_list)
# 执行脚本
os.system("print('hello python')")
在读文件的时候往往需要遍历文件夹,python的os.path包含了很多文件、文件夹操作的方法。下面列出:
os.path:
os.path.abspath(path) #返回绝对路径
os.path.basename(path) #返回文件名
os.path.commonprefix(list) #返回多个路径中,所有path共有的最长的路径。
os.path.dirname(path) #返回文件路径
os.path.exists(path) #路径存在则返回True,路径损坏返回False
os.path.lexists #路径存在则返回True,路径损坏也返回True
os.path.expanduser(path) #把path中包含的"~"和"~user"转换成用户目录
os.path.expandvars(path) #根据环境变量的值替换path中包含的”$name”和”${name}”
os.path.getatime(path) #返回最后一次进入此path的时间。
os.path.getmtime(path) #返回在此path下最后一次修改的时间。
os.path.getctime(path) #返回path的大小
os.path.getsize(path) #返回文件大小,如果文件不存在就返回错误
os.path.isabs(path) #判断是否为绝对路径
os.path.isfile(path) #判断路径是否为文件
os.path.isdir(path) #判断路径是否为目录
os.path.islink(path) #判断路径是否为链接
os.path.ismount(path) #判断路径是否为挂载点()
os.path.join(path1[, path2[, ...]]) #把目录和文件名合成一个路径
os.path.normcase(path) #转换path的大小写和斜杠
os.path.normpath(path) #规范path字符串形式
os.path.realpath(path) #返回path的真实路径
os.path.relpath(path[, start]) #从start开始计算相对路径
os.path.samefile(path1, path2) #判断目录或文件是否相同
os.path.sameopenfile(fp1, fp2) #判断fp1和fp2是否指向同一文件
os.path.samestat(stat1, stat2) #判断stat tuple stat1和stat2是否指向同一个文件
os.path.split(path) #把路径分割成dirname和basename,返回一个元组
os.path.splitdrive(path) #一般用在windows下,返回驱动器名和路径组成的元组
os.path.splitext(path) #分割路径,返回路径名和文件扩展名的元组
os.path.splitunc(path) #把路径分割为加载点与文件
os.path.walk(path, visit, arg) #遍历path,进入每个目录都调用visit函数,visit函数必须有3个参数(arg, dirname, names),dirname表示当前目录的目录名,names代表当前目录下的所有文件名,args则为walk的第三个参数
os.path.supports_unicode_filenames #设置是否支持unicode路径名
下面给出一种遍历的实现:
rootdir = 'F:\data'
list = os.listdir(rootdir) #列出文件夹下所有的目录与文件
for i in range(0,len(list)):
path = os.path.join(rootdir,list[i])
if os.path.isfile(path):
#你想对文件的操作