文件操作

文件操作:

打开文件,读写文件,操作文件内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
open() 打开或者建立文件
格式:open('文件路径','打开方式',encoding = '设置字符集')

打开方式:
基础模式:
w w模式 write 写入模式
1.文件不存在则新建文件,文件存在则打开并且清空文件
2.文件的指针指向文件的开头
r r模式 read 读取模式
1.文件不存在则报错,文件已存在则打开文件
2.文件的指针指向文件的开头
x x模式 xor 异或模式
1.文件不存在则新建文件,文件已存在则报错
2.文件的指针指向文件的开头
a a模式 append 追加模式
1.文件不存在则新建文件,文件已存在则打开文件
2.文件指针指向文件的末尾
扩展模式:
b b模式 bytes bytes模式
+ plus模式 增强模式

文件操作模式:
w,r,a,x
wb,rb,ab,xb
w+,r+,a+,x+
wb+,rb+,ab+,xb+

文件指针:程序操作文件的光标(我们看不见 不是我们使用的光标)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#w模式
fp = open('test1.txt','w',encoding='utf-8')
fp.write('人生苦短,我用python')

#r模式
fp = open('test2.txt','r',encoding='utf-8')
data = fp.read()
print(data)

#x模式
fp = open('test3.txt','x',encoding='utf-8')

#a模式
fp = open('test4.txt','a',encoding='utf-8')
fp.write('人生苦短,我用python')

#b模式
fp = open('test5.txt','wb',encoding='utf-8')
fp.write('一二三四五,上山打老虎'.encode())#必须是bytes类型

#+模式
fp = open('test6.txt','w+',encoding='utf-8')
fp.write('兄弟连激情四射!')
#将文件指针移动到开头
fp.seek(0)
#读取操作
data = fp.read()
print(data)
#关闭文件
fp.close()

文件的读取

  • close()和read()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
close():关闭文件对象,方便回收资源
文件打开就要关闭!

read() 读取文件内容
格式:文件io对象.read()
读取所有内容
格式:文件io对象.read(读取的字符个数)
读取指定长度的字符

fp = open('read.txt','r',encoding= 'utf-8')
#读取操作1
data = fp.read()
print(data)
#读取操作2
data = fp.read(5)
print(data)
  • readline()
1
2
3
4
5
6
7
8
9
10
11
12
13
readline() 一次读取一行的内容
格式:文件io对象.readline()
读取一行内容
格式:文件io对象.readline(读取的字符个数)
读取内容:如果个数>当前行的字符数,只读取当前行,如果读取的字符个数<=当前行字符串,按照指定的长度读取

fp = open('readline.txt','r',encoding='utf-8')
#读取一行内容
data = fp.readline()
print(data)
#读取一行内容
data = fp.readline(30)
print(data)
  • readlines()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
readlines() 一次读去多行内容
格式:文件io对象.readlines()
将所有数据按行读取到列表当中去
格式:文件io对象.readlines(字符个数)
将所有数据按行读取到列表当中去

fp = open('readlines.txt','r',encoding='utf-8')
#读取内容1
data = fp.readlines()
print(data)
#读取内容2
data = fp.readlines(11)
print(data)

注意:如果字符个数不满1行按照一行计算
  • write()和writelines()
1
2
3
4
5
6
7
8
9
10
11
write() 向文件中写入内容
格式:文件io对象.write(内容)
writelines() 将容器数据写入到文件当中
格式:文件io对象.writelines(容器类数据)

shi = ['鹅鹅鹅\n','曲项向天歌\n','白毛浮绿水\n','红掌拨清波']
fp = open('writelines.txt','w',encoding='utf-8')
#写入方法
fp.write('唧唧复唧唧,木兰当户织')
#写入操作
fp.writelines(shi)
  • truncate()
1
2
3
4
5
6
truncate()截取文件内容
格式:文件io对象.truncate(字节个数)

fp = open('truncate.txt','r+')
#截取操作
fp.truncate(10)#这里的长度是字节个数而不是字符个数!!

与文件指针相关的函数

  • tell()

获取当前文件指针的位置,文件指针按照字节计算而不是字符!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
格式:文件io对象.tell()
返回值:文件指针位置的整数

fp = open('tell.txt','r',encoding='utf-8')
#获取文件指针的位置
position = fp.tell()
print(position)

#读取文件内容
data = fp.read(3)
print(data)
#获取文件指针的位置
position = fp.tell()
print(position)
  • seek()

设置指针的位置

1
2
3
4
5
6
格式:文件io对象.seek(指针长度,参考位置)  #这是官方定义的功能
指针长度: 只是一个整数
参考位置: 0 表示从头开始计算长度 【只有这个可以使用,可以直接省略】
1 表示从当前指针的位置开始计算长度
2 表示从末尾向前计算长度

1
2
3
4
5
6
7
8
9
10
11
fp = open('seek.txt','r',encoding='utf-8')
#获取当前指针的位置
print(fp.tell())
#调整文件指针的位置
fp.seek(12,0)
#获取当前指针的位置
print(fp.tell())
#读取内容
print(fp.read(3))
#获取当前指针的位置
print(fp.tell())

OS模块的应用

使用os模块必须加载os模块才可以使用。

1
2
加载os模块
import os
  • getcwd()

获取当前的工作目录(get current work directory)

1
2
3
4
5
6
7
格式:os.getcwd(),返回值:当前工作目录的地址字符串

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

注意:当前工作目录:操作文件或者文件夹等信息的默认查找使用的文件夹
  • chdir()

修改当前的工作目录

1
2
3
4
5
格式:os.chdir(要设置的工作目录),返回值:无

#修改当前工作目录
os.chdir('D:/')
open('test1.txt','w')
  • listdir()

获取指定文件夹中的所有内容的信息组成的列表

1
2
3
4
格式:os.listdir(路径),返回值:存放所有内容名称的列表

result = os.listdir('C:/Users/xdl/PycharmProjects/python_03')
print(result) #获取目录中所有文件或者文件夹的名称
  • mkdir()

创建文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
格式:os.mkdir(文件夹路径,权限设置),返回值:无

os.mkdir('D:/father',0o777)

以下内容对linux有效,window无所谓
0o 7 7 7
八进制 所有者 所属组 其他人

所有者:文件夹或者文件归谁所有 admin 用户
所属组:所有者所在的组别 group用户
其他人: 不是所有者或者所属组的其他用户 other用户

权限划分:
可读,可写,可执行
4 2 1
  • makedirs()

递归创建文件夹

1
2
3
4
5
格式:os.makedirs(路径,权限),返回值:无

#递归创建文件夹
#os.mkdir('D:/a/b/c')#普通方式创建文件夹
os.makedirs('D:/a/b/c')
  • rmdir()

删除空文件夹

1
2
3
4
格式:os.rmdir(路径),返回值:无

#删除空文件夹
os.rmdir('D:/father')
  • removedirs()

递归删除空文件夹

1
2
3
4
5
格式:os.removedirs(路径),返回值:无

#递归删除空文件夹
os.removedirs('D:/a/b/c')
#递归删除空文件夹时不可以正在使用里面的文件,否则不可删除。