Python编程基础(中国mooc)7

os模块的使用--基础操作:

通过os模块可以方便地使用操作系统的相关功能。
使用os模块的功能前,需要先通过“import os”将其导入。


查看系统平台:
使用“os.name”可以查看当前操作系统的名字,Windows用字符串
“nt”表示,Linux用字符串“posix”表示。


获取当前系统平台路径分隔符:
不同操作系统可能会使用不同的路径分隔符。
例如,windows系统以“\\”作为路径分隔符,而Linux系统以"/"作为路径分隔符。使用"os.sep"可以获取当前系统平台的路径分隔符。

 

获取当前工作目录:
使用os.getcwd函数可以获取当前工作目录。
如果要访问当前工作目录下的data子目录中的test.dat文件,则除了可以使用'data'+os.sep+'test.dat'或'data{sep}test.dat'.format(sep=os.sep)这种相对路径形式外,还
可以写为如下的绝对路径形式:
os.getcwd()+os.sep+'data'+os.sep+'test.dat'
或'{cwd}{sep}data{sep}test.dat'.format(cwd=os.getcwd(),sep=os.sep)

 

获取环境变量值:
os.environ是一个包含所有环境变量值的映射对象,在python控制台下直接输入os.environ即可查看当前所有环境变量。

如果要查看某一个环境变量值,则可以采用以下方式:
os.environ[key] 或 os.getenv(key)
其中,os.getenv是一个函数,其功能是根据参数指定的键名返回对应的环境变量值。

例:查看HOME环境变量的值。os.environ['HOME'] 或 os.getenv('HOME')

 


获取文件和目录列表:
使用os.listdir函数可以获取指定路径下的所有文件和目录的名字,
os.listdir函数的语法格式为:os.listdir(path='.')
其中,path是要获取文件和目录名字的路径,默认值'.'表示获取当前路径下的所有文件和目录的名字。
返回值是由path路径下所有文件和目录名字组成的列表。

os.listdir(r'd:\Users\zhanggl21\Desktop\11.21日报')
Out[44]: 
['CallLogs.xls',
 'entrustManage-2019-11-22.xls',
 'userInformation-2019-11-22.xls',
 '中原网约看报表-单项条件查询.xlsx',
 '日话明细2019-11-22.xls',
 '聊天信息_20191121-20191121.xls']


 

os模块的使用--目录创建和删除:

目录创建:
使用os.mkdir和os.makedirs函数可以根据指定路径创建目录。
os.mkdir和os.makedirs函数的语法格式分别为:os.mkdir(path),os.makedirs(path)

其中,path指明了要创建的目录。
os.mkdir函数只能用于创建路径中的最后一个目录,即要求路径中除
最后一个目录外前面的目录应该都存在;而os.makedirs函数能够用于
依次创建路径中所有不存在的目录。

例:“Python编程基础”是最底层的文件夹
>>os.mkdir(r'd:\Users\zhanggl21\Desktop\Python编程基础\mkdir\cc')
Traceback (most recent call last):

  File "<ipython-input-58-40143e216b70>", line 1, in <module>
    os.mkdir(r'd:\Users\zhanggl21\Desktop\Python编程基础\mkdir\cc')

FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'd:\\Users\\zhanggl21\\Desktop\\Python编程基础\\mkdir\\cc'


>>os.makedirs(r'd:\Users\zhanggl21\Desktop\Python编程基础\mkdir\cc')

如果要创建的目录已经存在,
则os.mkdir和os.makedirs函数
都会给出FileExistsError错误,
即“当目录已存在时,无法
创建该目录”。


删除目录:
使用os.rmdir函数可以删除指定路径的最后一层目录。
os.rmdir函数的语法格式为:os.rmdir(path)

 

os.rmdir函数只能用于删除空目录(即
目录中不包含子目录和文件)。
如果要删除的目录不为空,则系统会给
出OSError错误。

 

 

删除指定目录的最后多层目录:

如果需要删除指定路径的最后多层目录,可以使用os.removedirs函数,
其语法格式为:os.removedirs(path)

其中,path指定了要删除的目录。与os.rmdir函数相同,os.removedirs
函数只能删除空目录。
os.removedirs函数会从指定路径中的最后一个
目录开始逐层向前删除,直到指定路径中的所有目录都删除完毕或者
遇到一个不为空的目录。

如果要删除的目录不存在,则执行os.rmdir和os.removedirs函数时系统都会给出FileNotFoundError错误,即“系统找不到指定的路径”。

 

 

os模块的使用--获取绝对路径、路径分离和路径连接:

获取指定相对路径的绝对路径:
相对路径是指相对于当前工作目录指定的路径,其中,“.”表示当前目录,而“..”表示上一层目录。而绝对路径是指从最顶层目录开始所给出的完整的路径。

例如,
如果要访问当前工作目录下名字为DLLs的目录,既可以使用相对路
径'.\\DLLs'或'DLLs',也可以使用绝对路径
'D:\\Python\\Python37\\DLLs';如果要访问当前工作目录的上一层目
录,既可以使用相对路径'..',也可以使用绝对路径'D:\\Python'。


使用os.path.abspath函数可以获取指定相对路径的绝对路径,其语法
格式为:
os.path.abspath('.')
Out[61]: 'd:\\Users\\zhanggl21'


编写程序时应尽量使用相对路径,这样当把编写好的程序从一台机
器复制到另一台机器上时也可以正常运行;而如果使用绝对路径,
则通常需要根据另一台机器的目录结构对程序中使用的所有绝对路
径做修改,造成了工作量的增加。

 

获取文件所在目录的路径:
使用os.path.dirname可以获取文件所在目录的路径,其语法格式为:os.path.dirname(path)
其作用是返回path中去除文件名后的路径。
os.path.dirname('.\\Desktop\\11.21日报\\日话明细2019-11-22.xls')
Out[63]: '.\\Desktop\\11.21日报'

 


获取文件名:
使用os.path.basename可以获取指定路径中的文件名,其语法格式为:os.path.basename(path)
其作用是返回path中的文件名。
print(os.path.basename('D:\\Python\\Python37\\LICENSE.txt'))
out:
LICENSE.txt

 

获取指定路径的目录名或文件名:

使用os.path.split函数可以将指定路径分解成路径名和目录/文件名两部分。
os.path.split函数的语法格式为:os.path.split(path)
其作用是返回一个由path分解得到的路径名和目录/文件名组成的元组

 

如果指定路径中不包含文件名,则会将指定
路径分成两部分:最后一个目录名和由前面
所有目录组成的路径名。例如,如果执行
“print(os.path.split(os.getcwd()))”,将在屏
幕上输出如下结果:('D:\\Python', 'Python37')

 

分离文件扩展名:
使用os.path.splitext函数可以将扩展名从指定路径中分离出来,其语法
格式为:os.path.splitext(path)
其作用是将path所指定的路径分解为一个元组(root, ext),其中ext是
扩展名,root是扩展名前面的内容。

 

 

路径连接:

使用os.path.join函数一个路径的多个组成部分用系统路径分隔符(即
os.sep)连接在一起,其语法格式为:os.path.join(path, *paths)
其作用是将各参数用系统路径分隔符连接得到的结果返回。

 

 

os模块的使用--条件判断:

判断指定路径目标是否为文件:
使用os.path.isfile函数可以判断指定路径目标是否为文件。
os.path.isfile函数的语法格式为:os.path.isfile(path)
其作用是判断path所指定的目标是否是文件。如果是文件,则返回True;否则,返回False。

rr=os.path.isfile(r'd:\Users\zhanggl21\Desktop\Python编程基础')
print(rr)
out:
False

 

判断指定路径目标是否为目录:
使用os.path.isdir函数可以判断指定路径目标是否为目录,其语法格式为:os.path.isdir(path)
其作用是判断path所指定的目标是否是目录。如果是目录,则返回True;否则,返回False。

rr=os.path.isdir(r'd:\Users\zhanggl21\Desktop\Python编程基础')
print(rr)
out:
True

 

判断指定路径是否存在:
使用os.path.exists函数可以判断指定路径是否存在,其语法格式为:os.path.exists(path)

其作用是判断path所指定的路径是否存在。如果存在,则返回True;否则,返回False。

 

判断指定路径是否为绝对路径:
使用os.path.isabs函数可以判断指定路径是否为绝对路径,其语法格式为:os.path.isabs(path)
其作用是判断path所指定的路径是否为绝对路径。如果是绝对路径,则返回True;否则,返回False。

 

 

文件打开:

程序中的数据都存储在内存中,当程序执行完毕后,内存中的数据
将丢失。文件可以用来进行数据的长期保存。

使用open函数可以打开一个要做读/写操作的文件,其常用形式为:open(filename, mode='r')

其中,filename是要打开文件的路径;mode是文件打开方式,不同文件打开方式可以组合使用,默认打开方式为'r'(等同于'rt')。使用open函数打开文件后会返回一个文件对象,利用该文件对象可完成文件中数据的读写操作。

 

文件关闭:

使用open函数打开文件并完成读/写操作后,必须使用文件对象的close
方法将文件关闭。

例如,假设有一个文件对象f,则在对f所对应的文件完成读/写操作后,
应使用“f.close()”关闭文件。

 

使用with语句可以让系统在文件操作完毕后自动关闭文件:

使用with语句可以让系统在文件操作完毕后自动关闭文件,从而避免忘
记调用close方法而不能及时释放文件资源的问题。
with语句示例。

 

文件对象的方法:

write方法:
使用文件对象的write方法可以将字符串写入到文件中,其语法格式为:f.write(str)
其中,f是open函数返回的文件对象,str是要写入到文件中的字符串。
f.write函数执行完毕后将返回写入到文件中的字符数。

nf=open(r'd:\Users\zhanggl21\Desktop\22.txt','w+')
nf.write('第1行:哈哈,我是第一行!\n')
nf.write('第2行:哈哈,我又写了一行,是第二行了!\n')
nf.write('我是最后一行!')
nf.close()

with open(r'd:\Users\zhanggl21\Desktop\22.txt','r') as nf:
    for x in nf:
        print(x)


第1行:哈哈,我是第一行!

第2行:哈哈,我又写了一行,是第二行了!

我是最后一行!

 

read方法:
使用文件对象的read方法可以从文件中读取数据,其语法格式为:f.read(n=-1)
其中,f是open函数返回的文件对象;n指定了要读取的字节数,默认值-1表示读取文件中的所有数据。read方法将从文件中读取的数据返回。
 

 

文件对象的readline、readlines和seek方法:

readline方法:
使用文件对象的readline方法可以从文件中每次读取一行数据,其语法
格式为:f.readline()
其中,f是open函数返回的文件对象。readline方法将从文件中读取的一行数据返回。

 

readlines方法:
使用文件对象的readlines方法可以从文件中按行读取所有数据,其语
法格式为:f.readlines()
f.readlines()
其中,f是open函数返回的文件对象。
readlines方法将从文件中按行读取的所有数据以列表形式返回。

f=open(r'd:\Users\zhanggl21\Desktop\22.txt','r')
f.readlines()
Out[66]: ['第1行:哈哈,我是第一行!\n', '第2行:哈哈,我又写了一行,是第二行了!\n', '我是最后一行!']

 

seek方法:
使用seek方法可以移动文件指针,从而实现文件的随机读写,其语法格式为:f.seek(pos,whence=0)
其中,f是open函数返回的文件对象;pos是要移动的字节数;whence是参照位置,默认值0表示以文件首作为参照位置,1和2分别表示以当前文件指针位置和文件尾作为参照位置。seek方法没有返回值。

文件的顺序读写是指打开文件后,按照从前向后的顺序依次进行数据的读/写操作;而随机读写可以直接使文件指针指向某个位置,并对该位置的数据进行读/写操作,即读/写数据的位置不按固定顺序、可以随机指定。

当以文本方式打开文件后,只支持以文件首作为参照位置进行文件指针的移动;而以二进制方式打开文件后,可以支持全部的三种参照位置。通过seek方法实现的文件随机读写主要用于二进制文件,建议尽量不对文本文件进行随机读写。与seek对应的还有一个tell方法,其用于获取当前文件指针的位置。

 

 

一维数据:

一维数据是指数据元素的值由一个因素唯一确定。

对于一维有序数据,可以使用列表存储;
对于一维无序数据,可以使用集合存储。

二维数据:

二维数据是指数据元素的值由两个因素共同确定。

通过二维列表可以存储二维数据。

 

 

csv操作一维、二维数据:

(Comma-Separated Values)是一种国际通用的一维、二维数据存储格式,其对应文件的扩展名为.csv,可使用Excel软件直接打开。
CSV文件中每行对应一个一维数据,一维数据的各数据元素之间用英文半角逗号分隔(逗号两边不需要加额外的空格);对于缺失元素,也要保留逗号,使得元素的位置能够与实际数据对应。
CSV文件中的多行形成了一个二维数据,即一个二维数据由多个一维数据组成;二维数据中的第一行可以是列标题,也可以直接存储数据(即没有列标题)。

 

CSV文件的写操作:
csv模块的writer方法可以生成一个writer对象,使用该对象可以将数据
以逗号分隔的形式写入到CSV文件中。csv.writer方法的语法格式为:csv.writer(csvfile)
csv.writer(csvfile)
其中,csvfile是一个具有write方法的对象。
如果将open函数返回的文件对象作为实参传给csvfile,则调用open
函数打开文件时必须加上一个关键字参数“newline=''”。

生成writer对象后,就可以使用csv模块的writerow和writerows方法向CSV
文件中写入数据。csv.writerow和csv.writerows方法的语法格式分别为
writer.writerow(row)
writer.writerows(rows)

其中,writer是csv.writer方法返回的writer对象;row是要写入到
CSV文件中的一行数据(如一维列表);rows是要写入到CSV文
件中的多行数据(如二维列表)。

 

CSV文件的读操作:
csv模块的reader方法可以生成一个reader对象,使用该对象可以将以逗
号分隔的数据从CSV文件读取出来。csv.reader方法的语法格式为:csv.reader(csvfile)

其中,csvfile要求传入一个迭代器。
open函数返回的文件对象除了是可迭代对象,同时也是迭代器。如果将
文件对象作为实参传给csvfile,则调用open函数打开文件时应加上一个
关键字参数“newline=''”。
返回的reader对象是一个可迭代对象,因此可以使用for循环直接遍历
CSV文件中的每一行数据,每次遍历会返回一个由字符串组成的列表。

 

异常的定义和分类:

异常是指因程序运行时发生错误而产生的信号。
如果程序中没有对异常进行处理,则程序会抛出该异常并停止程序运行。
为了保证程序的稳定性和容错性,我们需要在程序中捕获可能的异常并对其进行处理,使得程序不会因异常而意外停止。

异常可以分为语法错误和逻辑错误两类。
语法错误是指编写的程序不符合编程语言的语法要求。
逻辑错误是指虽然编写的程序符合编程语言的语法要求,但要执行的数据操作不被系统或当前环境所支持。

 

异常处理-try except:

使用try except语句可以捕获异常并做异常处理,其语法格式为
try:
    try子句的语句块
except 异常类型1:
    异常类型1的处理语句块
except 异常类型2:
    异常类型2的处理语句块

except 异常类型N:
    异常类型N的处理语句块


try except语句的处理过程为:
Ø 执行try子句的语句块。如果没有异常发生,则except子句不被执行。
Ø 如果有异常发生,则根据异常类型匹配每一个except关键字后面的异
常名,并执行匹配的那个except子句的语句块;
Ø 如果异常类型与所有except子句都不匹配,则该异常会传给更外层的
try except语句;
Ø 如果异常无法被任何的except子句处理,则程序抛出异常并停止运行。

except子句后面的异常类型,既可以是单个异常类型,如“except ValueError:”;
也可以是由多个异常类型组成的元组,如“except(TypeError, ZeroDivisionError):”;
还可以为空,即“except:”,表示捕获所有的异常。

 

 

异常处理--else、finally和raise:

else:
else子句是try except语句中的一个可选项。
如果try子句执行时没有发生异常,则在try子句执行结束后会执行else子句;
否则,如果发生异常,则else子句不会执行。

finally:
finally子句是try except语句中的另一个可选项。
无论try子句执行时是否发生异常,finally子句都会被执行。

 

raise:
除了系统遇到错误产生异常外,我们也可以使用raise产生异常。

 

 

异常处理--断言和自定义异常:

使用assert可以判断一个条件是否成立,如果成立则继续执行后面的语句;
如果不成立则会引发AssertionError异常。

 

自定义异常:

自定义异常,实际上就是以BaseException类作为父类创建一个子类。

 

第7 章 I/O 编程与异常
1. 利用os 模块查看当前系统的名字,应当使用 os.name 。
2. 利用os 模块获取当前系统平台路径的分隔符,应当使用 os.sep 。
3. 利用os 模块获取当前工作目录,应当使用 os.getcwd 方法。
4. 利用os 模块创建目录,可以使用 os.mkdir 方法或 os.makedirs 方法。
5. 判断指定路径目标是否是文件的方法是 os.path.isfile 。
6. os 模块中判断指定路径是否存在的方法是 os.path.exists 。
7. 根据文件对象的 closed 属性可以判断文件是否已关闭。
8. 使用文件对象的 seek 方法可以移动文件指针,从而实现文件的随机读写。
9. 使用writer 对象的 writerow 方法或 writerows 方法可以向CSV 文件中写入数
据。
10. os 模块中用于依次创建路径中所有不存在的目录的方法是makedirs


A. 如果要创建的目录已经存在,则os.mkdir 函数会报错
C. 如果要删除的目录不存在,则os.rmdir 函数会报错
D. 如果要删除的目录已存在但目录不为空,则os.rmdir 函数会报错


os 模块中用于删除指定路径的最后多层目录的方法是removedirs。


open 函数的默认打开方式是r


要从文件中按行读取所有数据,则应使用readlines方法。


无论try 子句执行时是否发生异常,都会执行的子句是finally。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值