python文件的读写操作

1. 文件的基本操作

打开文件
变量名=open(filename,mode,encoding)

变量名.read()

变量名.write(s)
关闭文件
变量名.close

def my_write():
    file=open("demo1.txt","w",encoding="utf-8")
    file.write('写入一行数据')
    file.close()

def my_read():
   file=open("demo1.txt","r",encoding="utf-8")
   print(file.read())
   file.close()

# 主程序运行
if __name__ == '__main__':
    my_write()
    my_read()

1.1 打开模式

打开模式模式说明
r以只读模式打开,文件指针在文件的开头,如果文件不存在,程序抛异常
rb以只读模式打开二进制文件,如图片文件
w覆盖写模式,文件不存在时创建,文件存在时内容覆盖
wb覆盖写模式写入二进制数据,文件不存在时创建,文件存在时内容覆盖
a追加写模式,文件不存在时创建,文件存在时在文件最后追加内容
+与w/r/a等一同使用,在原有功能的基础上增加同时读写功能

1.2 文件读写方法

读写方法功能说明
file.read(size从文件中读size个字符或字节,如果没有给定的参数时,则读取文件中的全部内容
file.readline(size)读取文件中的一行数据,如果给定参数时,则读取这一行中的size个字符或字节
file.readlines()从文件中读取所有内容,结果为列表类型
file.write(s)将字符串s写入文件
file.writelines(lst)将内容全部为字符串的列表lst写入文件
file.seek(offset)改变当前文件操作指针的位置,英文占一个字节,中文gbk编码占两个字节,utf-8编码占三个字节

写入一行数据

def my_write():
    file=open("demo1.txt","w",encoding="utf-8")
    file.write('写入一行数据')
    file.write('\n')
    file.close()
# 主程序运行
if __name__ == '__main__':
    my_write_list("demo1.txt",lst)

写入数组数据

def my_write_list(file,lst):
    f=open("demo1.txt","a",encoding="utf-8")
    f.writelines(lst)
    f.close() 
# 主程序运行
if __name__ == '__main__':
    lst=['text1\t','text2\n','text3\t','text4\n']

读取数据

def my_read(filename):
   file=open(filename,"w+",encoding="utf-8")
   file.write('我们都有一个家,名字叫中国\n') #写入完成,文件的指针在最后
   file.write('兄弟姐妹都很多,景色也不错\n')
   # seek 修改文件指针的位置
   file.seek(0)
   # 读取
   # s=file.read(2) # 读取指定的2个字符
   # s=file.readline() # 读取一行数据
   # s=file.readline(2)  # 读取一行中的2个字符
   s=file.readlines()  # 读取所有,一行为列表中的一个元素
   print(type(s),s)

   file.seek(3) # 3个字节,一个中文占三个字节,utf-8
   s=file.read()
   print(type(s),s)

   file.close()
# 主程序运行
if __name__ == '__main__':
    my_read("demo1.txt")

输出
<class ‘list’> [‘我们都有一个家,名字叫中国\n’, ‘兄弟姐妹都很多,景色也不错\n’]
<class ‘str’> 们都有一个家,名字叫中国
兄弟姐妹都很多,景色也不错

1.3 文件复制

文件复制就是一个边读边写的过程

def copy(src,new_path):
    # 打开源文件
    file1=open(src,'rb')
    # 打开目标文件
    file2=open(new_path,'wb')
    # 开始复制,边读边写
    s=file1.read() # 读取源文件所有
    file2.write(s) # 向目标文件写入所有
    #关闭
    file2.close()
    file1.close()

if __name__ == '__main__':
    src='D:/home/1.png'
    new_path='D:/home/2.png'
    copy(src,new_path)

1.4 with语句

又称上下文管理器,在处理文时,无论是否产生异常,都能保证with语句执行完毕后关闭已经打开的文件,这个过程是自动的,无需手动操作。
语法结构:

with open(...)as file:
	pass

写入文件

def write_fun():
    with open('demo1.txt', 'w',encoding='utf-8') as f:
        f.write('我今天学习了with语句')
if __name__ == '__main__':
    write_fun()

读文件

def read_fun():
    with open('demo1.txt', 'r',encoding='utf-8') as f:
        print(f.read())
if __name__ == '__main__':
    read_fun()

复制文件

def copy(src_file,target_file):
    with open(src_file,'r',encoding='utf-8') as f1:
        with open(target_file,'w',encoding='utf-8') as f2:
            f2.write(f1.read())
if __name__ == '__main__':
    copy('demo1.txt','demo2.txt')

2. os模块,目录与文件的相关操作

函数名称描述说明
getcwd()获取当前的工作路径
listdir(path)获取path路径下文件和目录信息,如果没有指定path,则获取当前路径下的文件和目录信息
mkdir(path)在指定路径下创建目录(文件夹)
makedirs(path)创建多级目录
rmdir(path)删除path下的空目录
removedirs(path)删除多级目录
chdir(path)把path设置为当前目录
walk(path)遍历目录树,结果为元组,包含所有路径名、所有目录列表和文件列表
remove(path)删除path指定的文件
rename(old,new)将old重命名为new
stat(path)获取path指定的文件信息
startfile(path)启动path指定的文件

2.1 查看当前工作路径

import os
print('获取当前工作路径os.getcwd()=',os.getcwd())

2.2 指定路径下的所有目录及文件

lst=os.listdir()
print('当前路径下的所有目录及文件',lst)
print('指定路径下的所有目录及文件',os.listdir('./'))

2.3 创建目录

如果要创建的文件夹存在,则程序报错FileExistsError

# 创建单个目录
os.mkdir('./01')
# 级联创建
os.makedirs('./01/02/01/01',exist_ok=True)

2.4 删除目录

# 删除单个目录,如果删除的目录不存在,程序会报错
# 删除单个目录,如果目录不为空,程序会报错
os.rmdir('./01/02/01')
# 级联删除
os.removedirs('./01/02/01/01')

2.5 改变当前工作路径

# 改变工作路径
os.chdir('D:/home')
print('获取当前工作路径os.getcwd()=',os.getcwd())

2.6 遍历目录树

# 遍历目录树,递归
for dirs,dirlst,filelst in os.walk('D:/home/02'):
     print(dirs,dirlst,filelst)

2.7 删除文件

当文件不存在,报错 FileNotFoundError

import os
# 当文件不存在,报错 FileNotFoundError
os.remove('./demo1.txt')

2.8 重命名

import os
# 
os.rename('./demo2.txt','./demo1.txt')

2.9 获取文件信息

# 转换时间格式
import time
def date_format(longtime):
    s=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(longtime))
    return s
# 
info=os.stat('./demo1.txt')
print(info)

print('最近一次访问时间是:',date_format(info.st_atime))
print('在windows操作系统中显示的文件的创建时间:',date_format(info.st_ctime))
print('最后一次修改时间是:',date_format(info.st_mtime))
print('文件的大小(单位是字节):',info.st_size)

输出
os.stat_result(st_mode=33206, st_ino=3659174697485022, st_dev=11137044440818564311, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1722317759, st_mtime=1722317759, st_ctime=1722317759)
最近一次访问时间是: 2024-07-30 13:35:59
在windows操作系统中显示的文件的创建时间: 2024-07-30 13:35:59
最后一次修改时间是: 2024-07-30 13:35:59
文件的大小(单位是字节): 0

3. os.path模块

提供了一些目录或文件的操作函数

函数名称描述说明
abspath(path)获取目录或文件的绝对路径
exists(path)判断目录或文件在磁盘上是否存在,结果为bool类型,如果目录或文件在磁盘上存在,结果为true,否则为false
join(path,name)将目录与目录名或文件名进行拼接,相当于字符串的+操作
splitext()分别获取文件名和后缀名
basename(path)从path中提取文件名
dirname(path)从path中提取路径(不包含文件名)
isdir(path)判断path是否是有效路径
isfile(path)判断 file是否是有效文件

3.1 获取目录或文件的绝对路径

print(os.path.abspath('./demo1.txt'))

3.2 判断目录或文件是否存在

# 判断文件是否存在
print(os.path.exists('./demo1.txt'))
# 判断目录是否存在
print(os.path.exists('./01'))

输出
True
True

3.3 拼接路径

print(os.path.join('D:/python/demo2/file','demo1.txt'))

输出
D:/python/demo2/file/demo1.txt

3.4 提取文件名

print(os.path.basename('./demo1.txt'))

输出
demo1.txt

3.5 分割文件名和后缀名

print(os.path.splitext('./demo1.txt'))

输出
(‘./demo1’, ‘.txt’)

3.6 提取路径

print(os.path.dirname('D:/python/demo2/file/demo1.txt'))

输出
D:/python/demo2/file

3.7 判断一个路径是否是有效

print(os.path.isdir('./01'))

输出
True

3.8 判断文件是否有效

print(os.path.isfile('./demo1.txt'))

输出
True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值