1.1 读取整个文件

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

 with open(r'E:\test.txt') as file_object:
contents = file_object.read()
print(contents.rstrip()) # 可以去除末尾空格(补充:.strip() 去除头尾空格,lstrip() 去除头部空格)
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.2345
2345
2345
<_io.TextIOWrapper name='E:\\test.txt' mode='r' encoding='cp936'>

1.2 逐行读取

 with open(r'E:\test.txt') as file_object:
for line in file_object:
print(line.rstrip())

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

  输出:

 1.2345
2345
2345

1.3 存储各行的列表

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

 file_content = []
with open(r'E:\test.txt') as file_object:
file_content = file_object.readlines() for line in file_content:
print(line.rstrip())

  输出:

 1.2345
2345
2345

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

2.1 写入空文件

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

  解析:

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

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

2.2 附加到文件

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

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

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

 # 文件异常
try:
with open(r'E:\test3.txt') as file_object2:
content = file_object2.read()
except FileNotFoundError:
print('文件不存在')
else:
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不能是是一个文件路径,是目录
 import os
import shutil
# print(os.remove(r'E:\test\test.py')) # 删除文件
# print(os.removedirs(r'E:\test')) # 删除空目录
print(shutil.rmtree(r'E:\test')) # 递归删除目录
print(os.getcwd(), #F:\projects\facialexpress
'\t',
os.path.realpath(__file__)) # F:\projects\facialexpress\test.py print(os.path.split(r'E:\myeclipse\Common\artifacts.xml'))
print(os.path.isfile(r'E:\myeclipse\Common\artifacts.xml'))
print(os.path.isdir(r'E:\myeclipse\Common\artifacts.xml'))
print(os.path.abspath(os.curdir))
print(os.path.realpath(os.curdir))
print(os.path.splitext(r'E:\myeclipse\Common\artifacts.xml'))
print(os.path.basename(r'E:\myeclipse\Common'))
print(os.path.basename(r'E:\myeclipse\Common\artifacts.xml'))
print(os.path.dirname(r'E:\myeclipse\Common\artifacts.xml'))
print(os.path.join(os.getcwd(),'test.py'))
# 以下测试 os.chdir() 切换目录
print('==========','\n', os.getcwd()) # F:\projects\facialexpress
os.chdir(r'C:\Windows')
print('--->',os.getcwd()) # C:\Windows
 None
F:\projects\facialexpress F:\projects\facialexpress\test.py
('E:\\myeclipse\\Common', 'artifacts.xml')
True
False
F:\projects\facialexpress
F:\projects\facialexpress
('E:\\myeclipse\\Common\\artifacts', '.xml')
Common
artifacts.xml
E:\myeclipse\Common
F:\projects\facialexpress\test.py
==========
F:\projects\facialexpress
---> C:\Windows

  

Python基础(七)——文件和异常的更多相关文章

  1. 七. Python基础(7)--文件的读写

    七. Python基础(7)--文件的读写 1 ● 文件读取的知识补充 f = open('file', encoding = 'utf-8') content1 = f.read() content ...

  2. python基础之文件读写

    python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到 ...

  3. 第二篇:python基础之文件读写

    python基础之文件读写   python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使 ...

  4. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  5. Python基础_文件的的处理及异常处理

    今天主要讲讲文件读写及异常处理. 一.文件操作 1.1 文件的创建及读 打开文件 open 函数  open(file,[option]) file 是要打开的文件 option是可选择的参数文件的打 ...

  6. python基础之文件处理

    读和写文件 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直 ...

  7. Python基础、文件处理

    一.概述 Python中操作文件是通过file对象来处理的,步骤: 指定文件的路径.操作的模式 对文件进行操作,读或写操作 关闭文件对象 f = open( '文件路径','访问模式') # 打开文件 ...

  8. 【穿插】Python基础之文件、文件夹的创建,对上一期代码进行优化

    在上一期妹子图的爬虫教程中,我们将图片都保存在了代码当前目录下,这样并不便于浏览,我们应该将同一个模特的图片都放在一个文件夹中. 今天我们就简单讲一下Python下如何创建文件.文件夹,今后就可以用上 ...

  9. python基础4文件操作

    在磁盘上读取文件的 功能都是由操作系统来实现的,不允许普通的程序直接操作磁盘,所以读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据( ...

  10. Python基础:内置异常(未完待续)

    本文根据Python 3.6.5的官文Built-in Exceptions编写,不会很详细,仅对Python的内置异常进行简单(重难点)介绍——很多异常都可以从名称判断出其意义,罗列所有的内置异常. ...

随机推荐

  1. ent 基本使用 一 schema 迁移

    ent 是 facebook 开源的golang orm 框架,简单强大,以下是一个简单使用 环境准备 安装ent 工具 go get github.com/facebookincubator/ent ...

  2. 一篇JavaScript技术栈带你了解继承和原型链

    作者 | Jeskson 来源 | 达达前端小酒馆 1 在学习JavaScript中,我们知道它是一种灵活的语言,具有面向对象,函数式风格的编程模式,面向对象具有两点要记住,三大特性,六大原则. 那么 ...

  3. Dynamic_Rankings(动态区间第k大)

    ZOJ - 2112 \[ \ \] (那些说这道题是树状数组套主席树的人一定对主席树有误解!) 这里我们用树状数组套线段树来解决来写 首先 , 我们需要有n棵线段树(不是\(n^2\)空间,别慌) ...

  4. java复制对象之深拷背

    在java开发中,有时我们需要复制对象,并且确保修改复制得到的对象不会影响原来的对象. 于是,有些人可能会写出类似以下的代码: public class CloneTest { public stat ...

  5. Java Thread dump 日志分析

    jstack Dump 日志文件中的线程状态 dump 文件里,值得关注的线程状态有: 死锁,Deadlock(重点关注)  执行中,Runnable 等待资源,Waiting on conditio ...

  6. Git Bash设置代理

    从GitHub clone代码速度比较慢,设置代理,(假设端口是1080): git config --global https.proxy http://127.0.0.1:1080 git con ...

  7. Tensorflow 损失函数(loss function)及自定义损失函数(三)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/limiyudianzi/article ...

  8. Mongodb聚合 时间分组(转载)

    // Requires official MongoShell 3.6+ use MediaNetDB; db.getCollection("TestCollection").ag ...

  9. 变异的功能 | variants function | coding | non-coding

    variant主要分为两类: coding noncoding 这两大类的分析方法截然不同,coding主要直接影响了mRNA和蛋白:而noncoding,主要是影响调控. coding编码区如何分析 ...

  10. 关于RSA汇总

    写在前面 安全测试需要, 后台数据需要签名, 前台验签, 于是有了这篇hao123. 正文 jsrsasign https://github.com/kjur/jsrsasign jsrsasign使 ...