1 读写文件
1.1 文件路径与当前目录
- 文件的属性:“路径”和“文件名”
注:Windows中文件夹名和文件名不区分大小写的。
-
路径分隔符:在windows上,路径书写是使用倒斜杠
\
作为文件夹之间的分隔符,Linux和OS X用的是正斜杠/
-
路径拼接函数
os.path.join()
- 作用:连接两个或更多的路径名组件
- 注意:
- 1.如果各组件名首字母不包含’/’,则函数会自动加上
- 2.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃
- 3.如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾
import os os.path.join('test','docu') # 'test\\docu'
结果’test\docu’有两个斜杠,这是因为有一个斜杠是用来转义的,在OS X或Linux上调用这个函数,这个字符串就会是’test/docu’
-
当前工作目录
os.getcwd()
;改变当前目录路径os.chdir()
os.getcwd() # 'C:\\Users\\YG小白\\Desktop\\DW-办公自动化\\test'
os.chdir('C:\\Users\\YG小白\\Desktop\\DW-办公自动化\\1') os.getcwd() # 'C:\\Users\\YG小白\\Desktop\\DW-办公自动化\\1'
注意:并不是将文件移动了,只是改变路径了
1.2 路径操作
1.2.1 绝对与相对路径
-
绝对路径:从根文件夹开始
-
相对路径:相对于程序当前的工作目录。
相对路径中,单个句点“.”表示当前目录的缩写,两个句点“…”表示父文件夹。
-
os.path.abspath(path)
:路径转化函数,将相对路径转化为绝对路径,将返回参数的绝对路径的字符串 -
os.path.isabs(path)
:判断是否为绝对路径,返回True,不是则返回Falseos.path.abspath('.') #当前路径转化为绝对路径。 'C:\\Users\\YG小白\\Desktop\\DW-办公自动化\\1' os.path.isabs('.') #False os.path.isabs(os.path.abspath('.')) #True
注意:原文件并没有被改变路径
1.2.2 路径操作
os.path.relpath(path,start)
:返回从start路径到path的相对路径的字符串。如果没提供start,就使用当前工作目录作为开始路径。os.path.relpath('C:\\Users\\YG小白\\Desktop\\DW-办公自动化\\test','C:\\') # 'Users\\YG小白\\Desktop\\DW-办公自动化\\test'
os.path.dirname(path)
:返回当前路径的目录名称。os.path.basename(path)
:返回当前路径的文件名称path = 'D:\\Datawhale\\python办公自动化\\python课程画图.pptx' os.path.dirname(path) os.path.basename(path) #'D:\\Datawhale\\python办公自动化' # 'python课程画图.pptx'
os.path.split()
:同时需要一个路径的目录名称和基本名称os.path.split(path) # ('D:\\Datawhale\\python办公自动化', 'python课程画图.pptx')
- 也可以调用
os.path.dirname()
和os.path.basename()
,将它们的返回值放在一个元组中,从而得到同样的元组。
(os.path.dirname(path),os.path.basename(path)) #('D:\\Datawhale\\python办公自动化', 'python课程画图.pptx')
- 也可以调用
- 回每个文件夹的字符串的列表:用
split()
字符串方法,并根据os.path.sep
中的字符串进行分割。os.path.sep
变量设置为正确的文件夹分割斜杠path.split(os.path.sep) #['D:', 'Datawhale', 'python办公自动化', 'python课程画图.pptx']
1.2.3 路径有效性检查
os.path
模块提供了一些函数,用于检测给定的路径是否存在,以及判定是文件还是文件夹。os.path.exists(path)
:如果path参数所指的文件或文件夹存在,则返回True,否则返回False。os.path.isfile(path)
:如果path参数存在,并且是一个文件,则返回True,否则返回False。os.path.isdir(path)
:如果path参数存在,并且是一个文件夹,则返回True,否则返回False。os.path.exists('C:\\else') # False os.path.isfile('C:\\Users\\YG小白\\Desktop\\DW-办公自动化\\test\\task1.ipynb') # Ture os.path.isdir('C:\\Users\\YG小白\\Desktop\\DW-办公自动化\\test') # Ture
1.3 文件与文件夹操作
1.3.1 创建新文件夹
os.makedirs(path)
import os os.makedirs('D:\\Datawhale\\practice') #查看目录,已创建,若文件夹已存在,不会覆盖,会报错
注意:
os.makedirs()
可以创建所有必要的中间文件夹
1.3.2 查看文件大小和文件夹内容
os.path.getsize(path)
:返回path参数中文件的字节数。os.listdir(path)
:返回文件名字符串的列表,包含path参数中的每个文件。os.path.getsize('C:\\Users\\YG小白\\Desktop\\DW-办公自动化\\test\\task1.ipynb') # 8333 os.listdir('C:\\Users\\YG小白\\Desktop\\DW-办公自动化') # ['OfficeAutomation', 'OfficeAutomation.rar', 'test']
- 如果想知道目录下所有文件的总字节数,可以同时使用
os.path.getsize()
和os.listdir()
totalSize = 0 for filename in os.listdir('C:\\Users\\YG小白\\Desktop\\DW-办公自动化'): totalSize = totalSize + os.path.getsize(os.path.join('C:\\Users\\YG小白\\Desktop\\DW-办公自动化',filename)) print(totalSize) # 601237
利用路径拼接函数
os.path.join()
,遍历文件夹中的每一个文件路径
1.4 文件读写过程
- 读写文件3个步骤:
1.调用open()
函数,返回一个File对象。
2.调用File对象的read()
或write()
方法。
3.调用File对象的close()
方法,关闭该文件。
1.4.1 打开文件
- 用
open()
函数打开文件:向它传递一个字符串路径,表明希望打开的文件。这既可以是绝对路径,也可以是相对路径。open()
函数返回一个File对象。helloFile = open('C:\\Users\\YG小白\\Desktop\\DW-办公自动化\\test\\hello.txt') print(helloFile) # <_io.TextIOWrapper name='C:\\Users\\YG小白\\Desktop\\DW-办公自动化\\test\\hello.txt' mode='r' encoding='cp65001'>
调用open()函数将会返回一个File对象。当需要读取或写入该文件,就可以调用helloFile变量中的File对象的方法。
1.4.2 读取文件内容
- 有了File对象,我们就可以开始从它读取内容。
read()
:读取文件内容。readlines()
:按行读取文件中的内容,取得一个字符串列表,列表中每个字符串是文本中的一行且以\n结束。
helloContent = helloFile.read() helloContent ''' 'Hello World!\n你好,世界!' '''
sonnetFile = open('D:\\Datawhale\\python办公自动化\\hello.txt') sonnetFile.readlines() ''' ['Hello World!\n', '你好,世界!'] '''
1.4.3 写入文件
-
需要用“写模式”
‘w’
和“添加模式”'a'
打开一个文件,而不能用读模式打开文件。 “写模式”将覆写原有的文件,从头开始。“添加模式”将在已有文件的末尾添加文本# 写模式 baconFile=open('bacon.txt','w') baconFile.write('Hello World!\n') baconFile.close() #注意,关闭后,才能完成写入,从txt文件中看到写入的内容。 baconFile=open('bacon.txt') baconFile.read()