在用Python进行程序开发时,我们不仅会使用代码,更要读取一些文件,来获取其中的信息。

文件是信息的集成者,有其相应的文件系统,在了解Python如何操作文件时,我们先来了解一下,文件的基础——文件系统

文件系统是一种用于向用户提供底层数据访问的机制。

它是数据的组织者和提供者。

它的底层,可以是磁盘,也可以是其它动态生成数据的设备比如网络设备。

它使得对文件的访问和查找变得简便。

文件系统中采用文件和树形目录这两个概念代替硬盘和光盘等物理设备使用的数据块的概念

在文件系统中,文件名是用于定位存储位置

用户使用文件系统时,保存数据不必知晓数据实际保存在硬盘的哪个数据块上。

只需要知道此文件的所属目录和文件名

写入新数据时,用户不必关心硬盘上的那个块地址是否被使用,硬盘上的存储空间管理功能由文件系统自动完成,用户只需知道数据被写入了哪个文件当中。

文件系统通常使用硬盘之类的存储设备,并维护文件在设备中的物理位置。

不过,文件系统不仅有本地的,也可能仅仅是一种访问数据的界面而已,实际的数据是通过网络协议(如NFS、SMB、9P等)提供的或者内存上。

严格地说,文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型

在上述的描述中,我们了解了文件系统是怎样组成,运行和定义的。

那么,在Python的程序开发时,是如何运用文件的?请往下看。

Python中有内置的 open 函数,用这个函数就可以进行一些有关文件的操作,比如说 读取文件,改写文件,转译文件。具体的操作字符如下:

'r'读取 #read

'w'写入 #write 截断之前的文本,

'x'写入 #存在已知文本会出现Error

'a'追加 #add 将内容写入到已有文件的末尾

'b'二进制模式

't'文本模式

'+'更新 #可读可写

在读取文件时,用 open 函数指定特定路径的文件,并将文件模式设置为‘r’来进行读取,然后通过 encoding 指定编码模式,然后就可以进行读写文件,具体实例如下。

def main():

f = open('青年学记.txt', 'r', encoding='utf-8')

print(f.read())

f.close()

if __name__ == '__main__':

main()

在上述代码里,如果不指定 encoding 编码的话,默认编码是 None ,也就是采用操作系统默认的编码。但是,若文件的编码模式与系统的编码模式不同的话,就会出现错误。也就会出现无法解码字符而导致读写失败的错误情况。

同样,若是 open 读取的文本不存在,那么也会出现错误,导致程序无法运行。

在程序运行中,在读取外界文件时,总会出现一些错误,如果在程序开发之前没有把这些情况考虑在内,就会出现程序不知如何运行而崩溃的最坏情况。

为了处理这些情况,我们可以先把这些错误下的,输出结果进行了解,然后在代码中把这些结果进行添加和处理,从而避免出现程序崩溃这种情况发生。

读取文件时发生的错误结果,大多为三种

FileNotFoundError #文件不存在

LookupError #未知的编码

UnicodeDecodeError #解码错误

在知晓这些错误状况后,就可以针对这些错误结果,用前面所学过的知识进行固定的输出结果,防止程序崩溃。为了达成此结果,我们要先了解一下 try 代码块 和 except finally代码块。

因为错误状态不同于普通的输出结果,所以需要用try 代码块作为开头,在其下以except 来获取错误状态,来决定输出相应的结果。最后用 finally 代码块来关闭打开的文件,释放掉程序中的外部资源。

具体代码如下:

def main():

f = None

try:

f = open('青年学记.txt', 'r', encoding='utf-8')

print(f.read())

except FileNotFoundError:

print('文件不存在')

except LookupError:

print('未知的编码')

except UnicodeDecodeError:

print('解码错误')

finally:

if f:

f.close()

if __name__ == '__main__':

main()

像上面这样的,程序对于错误的状态就有一定的抵抗力,会输出相应的指示,而不是直接崩溃。

在读取操作中,如果需要一行一行的来进行读取,可以使用以前学过的 for-in 循环或者 readlines来进行处理。

具体代码如下:

import time

def main():

# 一次性读取整个文件内容

with open('青年学记.txt', 'r', encoding='utf-8') as f:

print(f.read())

# 通过for-in循环逐行读取

with open('青年学记.txt', mode='r') as f:

for line in f:

print(line, end='')

time.sleep(0.5)

print()

# 读取文件按行读取到列表中

with open('青年学记.txt') as f:

lines = f.readlines()

print(lines)

if __name__ == '__main__':

main()

上述所有的代码全是关于读取文件的,如果需要写入文件或者添加文件,具体的操作也是一样的,就是在上述代码中 ‘r’的位置换成其他固定的字符,如 ‘w’写入,‘a’追加等等。

具体的使用应该视开发中的需求而决定。

如果对文章中的内容有什么困惑的地方,可以在评论区提出自己的问题,学记同大家一起交流,解决各种问题,一起进步。

青年学记 陪伴着各位青年

作者:青年学记 一名不断进步的程序猿

一起学习 一起进步

走向自立

如何把hello.c 输出到txt_如何在程序开发中进行文件的相关操作呢?往这看相关推荐

  1. matlab怎么输出图像文件夹,Matlab读取图片 显示和保存图像的相关操作

    当前有部份朋友还不清楚Matlab读取图片 显示和保存图像的操作,所以下面绿软吧就带来Matlab读取图片 显示和保存图像的相关操作,一起来看看吧! Matlab读取图片 显示和保存图像的相关操作 打 ...

  2. 全连接层的输入和输出_理解Web应用程序的本质,网络数据流处理与基础网络连接...

    前言 前面一篇文章,我从整个应用程序的整体以及跟运行环境的关系简单聊了一下我们现在常用的Spring框架的设计基础和原则,其中主要是控制反转和依赖注入,以及容器化编程等概念. 这里我不想去复述这些概念 ...

  3. 记一次数据结构与算法作业:利用循环和递归输出1-N的正整数的程序分析比较

    随便记录一次数据结构与算法的分析作业,内容为分析循环和递归实现输出1-N的正整数的对比.从时间和空间上分析了两种方式实现的递归方法和循环区别. 一.数据记录图表 二.分析 第一张图表制作时由于在打游戏 ...

  4. python print 输出到txt_(Python基础教程之七)Python字符串操作

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  5. java遍历给定目录,树形结构输出所有文件,包括子目录中的文件

    http://www.cnblogs.com/jenson138/p/4691418.html import java.io.File;public class ReadDirectory {// 文 ...

  6. 编写程序创建一个通讯录文件,在其中存入10位同学的姓名、年龄、电话号码,并在屏幕上输出第2、4、6、8、10位同学的信息

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p257 习题8 8.编写程序创建一个通讯录文件,在其中存入10位同学的姓名.年龄.电话号码,并在屏幕上 ...

  7. 【Android FFMPEG 开发】FFMPEG 交叉编译配置 ( 下载 | 配置脚本 | 输出路径 | 函数库配置 | 程序配置 | 组件配置 | 编码解码配置 | 交叉编译配置 | 最终脚本 )

    文章目录 一.FFMPEG 源码下载 解压 二.交叉编译工具 三.configure 脚本及帮助命令 四.配置 configure 脚本 五.输出目录配置 六.函数库配置 七.程序配置选项 八.组件配 ...

  8. VC如何在编译链接程序过程中在输出窗口看到链接的顺序

    VC如何在编译链接程序过程中在输出窗口看到链接的顺序 具体操作:选择VC菜单Project->Settings->Link页,然后在Project Options的Edit栏中输入/ver ...

  9. c语言使单片机输出低电平,单片机开发中的一些实用技巧

    很多朋友正在学习单片机开发技术,但开发中免不了要碰到这样.那样的问题,有些问题可能无碍大局,但有一些问题却直接影响到产品的成本.体积.性能.这里介绍笔者的几个技巧,希望对大家的工作有帮助. 一.C语言 ...

最新文章

  1. Android读取/dev/graphics/fb0 屏幕截图
  2. Liunx安装gogs,mysql,jdk,tomcat等常用软件
  3. linux java url 异常_Java连接虚拟机(Linux)中的Oracle数据库,连接异常~新手求解!
  4. Shell中字符串反转的六大方法
  5. Android CircleImageView圆形ImageView
  6. Python机器学习库——Sklearn
  7. Cocos2d-x 引擎概要
  8. 如何官网下载最新的谷歌chrome浏览器离线安装包
  9. t3系统建账请到服务器端修改,用友T3标准版常见问题及处理方法(一)
  10. windows系统ping端口及利用telnet命令Ping 端口
  11. 如何识别POS机是一清机还是二清机?
  12. win10内存满载测试软件,windows10系统使用自带内存检测工具检测内存好坏的方法...
  13. 在 Linux 上使用 VirtualBox 的命令行管理界面
  14. 笔记本开发android占用,安卓笔记本是什么样子的?Bliss OS进入开发阶段
  15. Kibana坐标地图example
  16. “信息安全产品”的昨天、今天和明天
  17. 最新版养猫小程序前端+后端搭建详细教程
  18. 阅读《精通Python爬虫框架Scrapy》
  19. bash shell 命令 - linux
  20. Top-Down Bottom-Up

热门文章

  1. 运用Logistic模型检验影响企业现金分红的主要因素
  2. java web项目中的根路径踩坑
  3. 强化学习《基于策略 - Policy Grident》
  4. 漫步数学分析三十——导数的定义
  5. 利用Spring的AbstractRoutingDataSource解决多数据源的读写分离问题
  6. mysql 分库分表 建表,mysql 分库分表 建表MySQL常用操作
  7. c语言多线程_马云都称赞的C语言、C++学习路线!!!!
  8. Django makemigration No changes detected
  9. C++/C--lambda表达式与函数对象【转载】
  10. IPC--进程间通信七 (socket)