一、文件路径(os模块)
1、不同操作系统,文件路径分隔符不同,windows:\,OS X/Linux:/,但os.path.sep变量将根据操作系统设置为正确的文件夹分割斜杠
2、绝对路径:从根文件夹开始;相对路径:对于程序的当前工作目录
(.)表示当前目录的缩写,(…)父文件夹
3、os.path模块方法
方法 | 说明 |
---|---|
os.path.join() | 连接两个或更多的路径名组件 |
os.path.abspath(path) | 返回参数的绝对路径的字符串(将相对路径转换为绝对路径的简便方法) |
os.path.isabs(path) | 如果参数是一个绝对路径,返回True,相对路径则返回False |
os.path.relpath(path, start) | 返回从start路径到path的相对路径的字符串,如果没有start,就使用当前工作目录为开始路径 |
os.path.dirname(path) | 返回一个字符串,包含path参数中最后一个斜杠之前的所有内容 |
os.path.basename(path) | 返回一个字符串,包含path参数中最后一个斜杠之后的所有内容 |
os.path.split(path) | 获得两个字符串(路径的目录名称和基本名称)元组,等价于(os.path.dirname(path), os.path.basename(path))。如果需要返回每个文件夹的字符串列表,可以使用字符串方法split(),FilePath.split(os.path.sep) |
os.path.getsize(path) | 返回path参数中文件/文件夹的总字节数 |
检查路径有效性的方法 | |
os.path.exists(path) | path参数所指的文件或文件夹存在,则返回True,否则返回False |
os.path.isfile(path) | ath参数所指的文件或文件夹存在,且是一个文件,则返回True,否则返回False |
os.path.isdir(path) | ath参数所指的文件或文件夹存在,且是一个文件夹则返回True,否则返回False |
注:os.path.join()
- 如果各组件名首字母不包含’/’,则函数会自动加上
- 第一个以”/”开头的参数开始拼接,之前的参数全部丢弃,当有多个时,从最后一个开始
- 如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾
import os
os.path.join('usr', 'bin','spam')
>'usr\\bin\\spam' #windows
>'usr/bin/spam' #OS X/Linux
os.path.abspath('.')
>'C:\\Python38'
os.path.abspath('.\\scripts') #windows目录名称不区分大小写
>'C:\\Python38\\Scripts'
os.path.isabs('.')
>False
os.path.isabs(os.path.abspath('.'))
>True
os.path.relpath('C:\\Windows', 'C:\\spam\\eggs')
>'..\\..\\Windows'
5、os模块方法
每个运行的计算机程序都有一个“当前工作目录”或cwd。所有没有从跟文件开始的文件名或路径,都假定在当前工作目录下。
方法 | 说明 |
---|---|
os.getcwd() | 获取当前工作路径的字符串 |
os.chdir() | 改变当前工作路径的字符串 |
os.makedirs() | 创建新文件夹 |
os.listdir(path) | 返回路径内各个文件名的字符串列表 |
import os
os.getcwd()
>'C:\\Python38'
os.chdir('C:\\Windows\\System32') #如果更改的当前目录不存在,会显示错误
>os.getcwd()
>'C:\\Windows\\System32'
os.makedirs('C:\\delicious\\wallet\\awasa')
#将创建所有不存在的中间文件夹
os.listdir(r'E:\2Books')
>['JdReaderEBooks', 'Python编程:从入门到实践.epub']
二、读取纯文本文件
纯文本文件只包含基本文本字符,不包含字体、大小和颜色信息,例如.txt拓展名的文本文件,记忆.py拓展名的python脚本。但PDF、图像、电子表格和可执行性程序等属于“二进制文件”,每种不同类型的二进制文件,都必须用相应的方式处理。
1、调用open(file_path [,‘w’ /‘r’/ ‘a’/ ‘r+’/‘rb’/’wb’])函数,返回一个File对象
- file_path可以是绝对路径,也可以是相对路径
- File对象是Python中另一种类型的值,与列表和字典一样
- 'w’写入模式;'r’读取模式;'a’附加模式;'r+'读取和写入文件模式,'rb’以读取二进制的模式打开文件,'wb’以写入二进制的模式打开文件,忽略模式实参,将默认只读模式打开文件,附加模式将write()写入的内容附加到原本内容,而不会删除原本内容
- 如果要写入的文件不存在,open()将自动创建,但如果以’w’模式打开文件,且文件已经存在,python将在返回文件对象前清空该文件
helloFile = open('C:\\Users\\pi_digits.tx')
quizFile = open('capitalsuiz%s.txt' % (quizNum + 1), 'w')
#执行时,占位符%s都将被(quizNum + 1)取代
#关键字with在不再需要访问文件后将其关闭,如果调用close()容易导致错误或者文件未及时关闭
#同时open()返回的文件对象只在with代码块内可用,要在代码块外访问文件内容,可将文件的各行存储在一个列表中
with open('pi_digits.txt') as file_object:
2、调用File对象的read()或write()方法
- 读取文本时,所有文本都解读为字符串,要将数字作为数值使用,须使用int(),要转换为浮点数,使用float()
- readlines():从该文件取得一个字符串的列表,列表中每个字符串就是文本中的每一行
- write():不会在写入的文本末尾自动添加换行符,如果写入多行,需要在语句中包含换行符
print(helloFile.read())
>'Hello World!'
3、调用File对象的close()方法,关闭该文件
三、保存变量
1、shelve模块
- 可以将Python程序中的变量保存到二进制的shelf文件中
- open()函数将参数的文件名设置为保存变量的shelf文件的文件名,同时将返回shelf值
- shelf值可以修改,且和字典类似,有keys()和values()方法,返回shelf中键和值的类似列表的值,但不是真正的列表,应该传递给list()函数取得列表的形式
- shelf值不必用读取模式或写入模式打开,在文件打开后,能同时执行读取和写入操作
import shelve
shelfFile = shelve.open('mydata')
cats = ['Zophie', 'Pooka', 'Simon']
shelfFile['carts'] = cats
print(list(shelfFile.keys()))
>['cats']
print(list(shelfFile.values()))
>[['Zophie', 'Pooka', 'Simon']]
shelfFile.close()
2、pprint.pformat()函数
- 返回参数里列表或字典内容的文本字符串,可以写入.py文件,该文件和其他模块一样,同样可以导入其他Python脚本中
- 由于Python脚本本身也是以.py作为文件拓展名,所以Python程序可以生成其他Python程序,然后将这些文件导入到脚本
- 创建.py文件的好处在于,文本文件容易读取和修改,但只有基本数据类型,如整型、浮点型、字符串、列表和字典等,可以作为简单文本写入一个文件,File对象就不能够编码为文本
import pprint
cats = [{'name': 'Zophie'}, {'name':'Pooka'}]
print(pprint.pformat(cats))
>[{'name': 'Zophie'}, {'name':'Pooka'}]
fileObj = open('myCats.py', 'w')
fileObj.write('cats = ' + pprint.pformat(cats) + '\n')
fileObj.close()