当前位置: 移动技术网 > IT编程>脚本编程>Python > Python基础(七)——文件和异常

Python基础(七)——文件和异常

2019年07月11日  | 移动技术网IT编程  | 我要评论

警花白艳妮全集,c25混凝土塌落度,www554431com

1.1 读取整个文件

  我们可以创建一个 test.txt 并写入一些内容,使用 python 读文件操作,读出文本内容。

1 with open(r'e:\test.txt') as file_object:
2     contents = file_object.read()
3     print(contents.rstrip()) # 可以去除末尾空格(补充:.strip() 去除头尾空格,lstrip() 去除头部空格)
4     print(file_object)

  解析

  open() 函数:python 中无论以何种方式使用文件(读取 or 添加等),都需要先 open() 文件。在这里,我们使用 open() 函数打开文件,并将对象存储于 file_object(此对象只能在 with 代码块中使用,如想在with之外用,详见 1.3

  注意:很奇怪,没有 close() 函数,这与 java 文件操作尤为不同。python 允许你自己 close ,只是如果你的 close 函数因为异常,而轮不到执行,则文件不会关闭。可能会造成文件数据受损。第二种可能,close 函数过早执行,而后面还有读写操作,则会出现更多错误。幸运的是 python 可以帮我们找到恰当的关闭时机,并且帮助我们执行关闭操作。    

  以下为输出内容,1~3 行是我的文本内容,最后一行是 file_object 对象:

1 1.2345
2    2345
3    2345
4 <_io.textiowrapper name='e:\\test.txt' mode='r' encoding='cp936'>

 

1.2 逐行读取

1 with open(r'e:\test.txt') as file_object:
2     for line in file_object:
3         print(line.rstrip())

  注意第三行,如果没有使用 .rstrip() 函数,则输出的每一行之间都有空格。解释:因为在文件中,每行的末尾都有一个看不见的换行符,而 print 函数还会自动加上换行符,所以,一共有两个换行符,使用 .rstrip() 函数可以消除多余的空白行。

  输出:

1 1.2345
2    2345
3    2345

 

1.3 存储各行的列表

  由于 1.1 中的 with 的限制,使用 readlines() 可破:

1 file_content = []
2 with open(r'e:\test.txt') as file_object:
3      file_content = file_object.readlines()
4 
5 for line in file_content:
6     print(line.rstrip())

  输出:

1 1.2345
2    2345
3    2345

  如果第三行使用 readline 则只会读取一行,可实验一番。

 

2.1 写入空文件

1 with open(r'e:\test.txt', 'w') as file_object:
2      file_object.write('aaaasssddd\ndddaass')

  解析

  第一行,依旧使用 open() 函数打开文件(文件不存在则自动创建),传入参数 w,告诉 python 以 写模式 打开文件(r 读模式,w 写模式,a 附加模式,r+ 读写模式。如果省略,默认读模式)。

  注意:python 在 w 模式打开文件时,在返回文件对象 file_object 的时候,会清空文件内容。同时,\n 表示换行,无需写成 \\n 或者 r "\n" 等。write 不会再末尾自动加换行符,需主动加  \n

 

2.2 附加到文件

1 with open(r'e:\test.txt', 'a') as file_object:
2      file_object.write('我是附加的内容\n我也是')
3 
4 with open(r'e:\test.txt') as file_object2:
5     content = file_object2.read()
6     print(content)
1 aaaasssddd
2 dddaass我是附加的内容
3 我也是

 

3.1 异常和 try-except-else 代码块

  普通异常处理同 java 基本一致,如下两个例子:

1 # 文件异常
2 try:
3     with open(r'e:\test3.txt') as file_object2:
4         content = file_object2.read()
5 except filenotfounderror:
6     print('文件不存在')
7 else:
8     print(content)

  try-except-else 代码块工作原理:执行 try 中可能出错的代码快,出错则执行 except ,顺利则执行 else 代码块。

 

4.1 os 常用函数补充

  • os.remove(path) 删除一个文件。os.removedir(path) 删除空目录。shutil.rmtree(path) 递归删除整个目录
  • os.getcwd() 查看当前目录
  • os.path.realpath(__file__) 查看当前运行文件路径
  • os.listdir(path) 返回该路径的目录名
  • os.path.exists(path) 判断文件 or 目录是否存在
  • os.path.split(path) 返回路径的目录名和文件名(path可以是文件也可是目录
  • os.path.isdir(path)
  • os.path.isfile(path)
  • os.path.realpath(path) 得到绝对(软连接有效)路径
  • os.path.abspath(path) 得到当前文件绝对路径 
  • os.path.splitext(path) 分离文件路径和文件名。如果路径是目录,则后缀为空字符串(path可以是文件也可是目录
  • os.path.basename(path) 返回路径最后一级(path可以是文件也可是目录
  • os.path.dirname(path) 与上一条相反,返回路径目录路径
  • os.path.join(path,file) 连接路径和文件名。类似字符串相加
  • os.chdir(path) 切换路径path不能是是一个文件路径,是目录

 

 1 import os
 2 import shutil
 3 # print(os.remove(r'e:\test\test.py')) # 删除文件
 4 # print(os.removedirs(r'e:\test')) # 删除空目录
 5 print(shutil.rmtree(r'e:\test')) # 递归删除目录
 6 print(os.getcwd(),  #f:\projects\facialexpress
 7       '\t',
 8       os.path.realpath(__file__)) # f:\projects\facialexpress\test.py
 9 
10 print(os.path.split(r'e:\myeclipse\common\artifacts.xml'))
11 print(os.path.isfile(r'e:\myeclipse\common\artifacts.xml'))
12 print(os.path.isdir(r'e:\myeclipse\common\artifacts.xml'))
13 print(os.path.abspath(os.curdir))
14 print(os.path.realpath(os.curdir))
15 print(os.path.splitext(r'e:\myeclipse\common\artifacts.xml'))
16 print(os.path.basename(r'e:\myeclipse\common'))
17 print(os.path.basename(r'e:\myeclipse\common\artifacts.xml'))
18 print(os.path.dirname(r'e:\myeclipse\common\artifacts.xml'))
19 print(os.path.join(os.getcwd(),'test.py'))
20 # 以下测试 os.chdir() 切换目录
21 print('==========','\n', os.getcwd()) # f:\projects\facialexpress
22 os.chdir(r'c:\windows')
23 print('--->',os.getcwd()) # c:\windows

 

 1 none
 2 f:\projects\facialexpress      f:\projects\facialexpress\test.py
 3 ('e:\\myeclipse\\common', 'artifacts.xml')
 4 true
 5 false
 6 f:\projects\facialexpress
 7 f:\projects\facialexpress
 8 ('e:\\myeclipse\\common\\artifacts', '.xml')
 9 common
10 artifacts.xml
11 e:\myeclipse\common
12 f:\projects\facialexpress\test.py
13 ========== 
14  f:\projects\facialexpress
15 ---> c:\windows

 

 

 

 

 

 

 

 

  

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网