python操作文件和目录_python文件和目录的操作

python文件和目录的操作

python中,变量、序列和对象中存储的数据是暂时的,程序结束后就会丢失,为了能够长时间地保存程序中的数据,需要将程序中的数据保存到磁盘文件中,python提供了内置的文件和对象和文件、目录进行操作的内置模块。通过这些技术可以很方便地将数据保存到文件中,以达到长时间保存的目的。通过读写文件的操作,我们可以实现数据持久化。在Python中可以通过open函数来获得文件对象,可以通过文件对象的read和write方法实现文件读写操作。

首先来看在python中对文件的操作:

打开和关闭文件:

有了文件系统,我们可以非常方便的通过文件来读写数据;在Python中要实现文件操作是非常简单的。我们可以使用Python内置的open函数来打开文件,在使用open函数时,我们可以通过函数的参数指定文件名、操作模式和字符编码等信息,接下来就可以对文件进行读写操作了。这里所说的操作模式是指要打开什么样的文件(字符文件或二进制文件)以及做什么样的操作(读、写或追加),具体如下:

创建和打开文件

model参数

r :以只读的方式打开文件,文件的指针将会放在文件的开头,为默认模式

rb :以二进制格式打开一个文件用于只读 ,文件指针会在文件的开头

r+ :打开一个文件用于读写,文件指针将会在文件的开头

rb+ :以二进制格式打开-个文件用于读写,文件指针会放在文件的开头

iw:打开个文件用于写入,如果该文件已存在则将会覆盖文件,如果不存在则创建新文件

wb :以二进制打开一个文件用于写入

wb+ :以二进制格式打开- 个文件用于读写,如果文件存在则覆盖 ,如果不存在则创建新文件

a:打开一个文件用于追加内容,如果文件已存在,文件指针会放在文件的结尾,如果不存在则创建新文件进行写入

ab :以二进制格式打开一个文件用于追加写入

a+ :打开一个文件用于读写,如果该文件已存在,文件指针会放在结尾,文件打开时会是追加模式,该文件不存在则创建新文件

ab+ : 以二进制格式打开一个文件用于追加。

1.打开一个文件,若要打开一个不存在的文件,需要指定mode的参数值为w,w+,a,a+,若存在该文件,后面加w,会创建新的文件,把原文件覆盖。打开文件时需要指定编码方式,在使用open()函数时,默认采用的是GBK编码,当打开的文件不是BGK编码时,将抛出异常。

File = open(‘status.txt’, ‘w’, encoding=‘utf-8’)

2.关闭文件:

File = open(‘status.txt’)

File.close()

print(File.closed) # 检查是否关闭成功:True为关闭成功,False为关闭失败

with语法:文件打开后,执行完成后自动关闭

with open(‘status1.txt’) as file:

pass # 此句执行完,文件自动关闭

print(file.closed) # 验证是否关闭

3.写入内容:

write方法,主要在文件里写入内容,写完,文件自动关闭

with open(‘status2.txt’,‘w’,encoding=‘utf-8’) as ff:

ff.write(‘我们班是T221,我们在学python’)

file = open(‘status.txt’, ‘a’,encoding=‘utf-8’)

file.write(‘hello,你好啊!’)

file.close()

如果要向文件中写入内容,可以在打开文件时使用w或者a作为操作模式,

前者会截断之前的文本内容写入新的内容,后者是在原来内容的尾部追加新的内容。

file = open(‘致橡树.txt’, ‘a’, encoding=‘utf-8’)

file.write(’\n标题:《致橡树》’)

file.write(’\n作者:舒婷’)

file.write(’\n时间:1977年3月’)

file.close()

也可以用循环语句写入内容

lines = [‘我们在上pyhton程序设计,python自动化测试’, ‘标题:《致橡树》’, ‘作者:舒婷’, ‘时间:1977年3月’]

file = open(‘致橡树2.txt’,‘w’,encoding=‘utf-8’)

for line in lines:

file.write(f’\n{line}’)

file.close()

4.读取内容:

with open(‘status2.txt’, ‘r+’,encoding=‘utf-8’) as ff:

string = ff.read(9) #从取文件的开始9个长度的内容

print(string)

读取文件中的某一行

with open(‘status2.txt’,‘r+’,encoding=‘utf-8’)as ff:

m = ff.readline(25)

print(m)

读取全部:

file = open(‘致橡树2.txt’,‘r’,encoding=‘utf-8’)

print(file.read())

除了使用文件对象的read方法读取文件之外,

还可以使用for-in循环逐行读取或者用readlines方法将文件按行读取到一个列表容器中

file = open(‘致橡树.txt’, ‘r+’, encoding=‘utf-8’)

print(file.read()) # 读取出内容

print(file.readlines()) # 读取出列表内容

file.close()

import time

file = open(‘致橡树.txt’, ‘r+’, encoding=‘utf-8’)

for line in file:

print(line, end=’’)

time.sleep(5)

file.close()

file = open(‘致橡树.txt’, ‘r+’, encoding=‘utf-8’)

lines = file.readlines()

print(lines) # 读取文件内容,读取出来为列表的形式

for line in lines:

print(line, end=’’)

time.sleep(0.5)

file.close()

4.用指针来读取文件内容:在utf-8编码格式中,三个字符为一个汉字。

seek,指针是按照字符的个数进行读取,不是字符串的长度,status2.txt中内容为:我们班是T221,我们在学python

with open(‘status2.txt’, ‘r+’,encoding=‘utf-8’) as ff:

ff.seek(12) # 从地四个字符后开始读取

string = ff.read(5) # 读取3个字符

print(string)

目录的操作:

1.目录的遍历

import os

tuples = os.walk(r’D:\demo4’)

for i in tuples:

print(i, ‘\n’)

path = ‘D:\demo4’

for root, dirs, files in os.walk(path, topdown=True):

for i in dirs:

print(‘a:’, os.path.join(root, i))

for j in files:

print(‘b:’, os.path.join(root, j))

import os # 导入操作系统的包

print(os.name) # nt表示Windows操作系统,posix表示linux操作系统

print(os.linesep) # 获取当前的电脑的换行符,看不到效果

print(os.sep) # 获取当前系统中的路径分隔符

print(os.getcwd()) # 获取当前的工作目录

print(os.listdir(r’D:/Python/AutoTest/T221’)) # 获取担当起路径下文件和目录信息,写入绝对路径

获取文件的绝对路径,默认是当前目录

print(os.path.abspath(r’python.txt’))

拼接路径,join函数不会判断路径是否存在

print(os.path.join(f’D:/Python/AutoTest/’, ‘文件操作/目录操作.py’)) # 只是拼接成一个新地址,不考虑地址的有效性

判断目录(路径)是否存在

print(os.path.exists(r’D:/Python/AutoTest/文件操作’))

判断文件是否存在

print(os.path.exists(r’D:/Python/AutoTest/T221/文件操作/目录操作.py’))

创建一级目录,只能创建一级,不能创建几层

os.mkdir(r’D:\demo4’)

在创建目录之前,需要判断目录是否存在

path = ‘D:\demo4’

if not os.path.exists(path):

os.mkdir(path)

print(‘创建成功’)

else:

print(‘该目录已经存在’)

创建多级目录

os.makedirs(r’D:\demo4\demo3\demo2\demo1’)

判断多层目录是否存在

lr=‘D:\demo5\demo3\demo2\demo1’

list1 = [‘D:\demo5’,‘D:\demo4\demo3’,‘D:\demo4\demo3\demo2’,‘D:\demo4\demo3\demo2\demo1’]

list2 = []

for i in range(4):

if not os.path.exists(list1[i]): # 判断目录是否存在

list2.append(list1[i])

if len(list2) == 4:

os.mkdir(list2[3]) # 执行多级目录的创建

print(list2)

删除目录(删除一个空目录)

os.rmdir(r’D:\demo4\demo3\demo2’) # 逐级删除,先删demo2

删除非空目录,rmtree()实现

import shutil

shutil.rmtree(‘D:\demo4\demo3’) # 也是逐级删除

删除文件

import os

os.remove(r’D:\demo4\demo3\234.txt’)

path = ‘D:\demo4\demo3\234.txt’

if os.path.exists(path):

os.remove(path)

print(‘删除结束’)

判断是否删除成功,删除成功,打印不出

print(os.path.exists(r’D:\demo4\demo3\234.txt’))

创建文件夹

os.mkdir(r’D:\nihao’)

with open(r’D:\nihao\11.txt’, ‘r’, encoding=‘utf-8’)as file:

file.write(‘你好啊,我们在学习pyhton程序设计,python程序设计很好玩’)

a = file.read()

print(a)

删除文件

os.remove(r’D:\nihao\11.txt’)

验证是否存在

print(os.path.exists(r’D:\nihao\11.txt’))

获得文件的详细信息

a = os.stat(r’D:\nihao\1234.txt’)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值