1、文件的读取

1.1 读取整个文件

  假设我们有一个叫做“hello.txt”的文件,文件内容如下:

helloWorld
helloPython
helloJava

  在该文件中,有三行字符串,接下来,我们就可以来读取打印它,代码如下:

 #方法一
file_hello = open('hello.txt')
content = file_hello.read()
print(content)
file_hello.close() #方法二
with open('hello.txt') as file_hello:
contents = file_hello.read()
print(contents)

运行后得到结果:

 helloWorld
helloPython
helloJava

  在读取一个文件的时候,我们首先需要去打开这个文件。在这里,可以调用open()这个方法来打开这个文件,open()方法会返回一个“hello.txt”文件的对象,并将这个对象存储在file_hello这个变量中。

  在有了文件的对象后,可以使用方法read()来读取这个文件的全部内容,并将读取到的文件存储在contents变量中,然后直接打印contents就可以了

  方法一和方法二的区别:在上面的代码中,我们可以看到最终的输出结果都是一样的,但是在方法一的最后,我们还执行了一段file_hello.close()代码。在我们打开文件,使用结束之后,我们必须对文件进行关闭,否则会占用资源,而且文件也会因为某些bug或代码的处理过冲中出现损坏的情况。在方法二中,我们在输出结果之后,并没有去执行关闭文件的操作,是因为我们使用了with语句,python中的with语句适用于对资源进行整合的场景,在不需要访问文件后,会自动将其关闭。保证不管在处理文件的过程中是否发生错误或者异常,在最终程序都会关闭文件,释放资源。

  在上述的输出结果中,我们发现在最后多了一个空行,这是因为read()方法在到达文件的末尾时会返回一个空字符串。如果不希望打印这个空行,我们可以使用rstrip():

 with open('hello.txt') as file_hello:
contents = file_hello.read()
print(contents.rstrip())

运行后得到结果:

 helloWorld
helloPython
helloJava

1.2 逐行读取

  我们可以使用for循环来遍历读取文件中每一行的数据

 #方法一:
file_path = 'txt_file/hello.txt'
with open(file_path) as file_hello:
for line in file_hello:
print(line) #方法二:
file_path = 'txt_file/hello.txt'
with open(file_path) as file_hello:
lines = file_hello.readlines()
print(lines)
for line in lines:
print(line)

运行后得到结果:

 方法一:
helloWorld helloPython helloJava 方法二:
['helloWorld\n', 'helloPython\n', 'helloJava\n']
helloWorld helloPython helloJava

  以上我们使用了两种方法来进行逐行读取。方法一,我们直接通过for循环来遍历file_hello变量,这种方法有一个缺点,那就是只能在with代码块内可用,所以我们如果想要脱离with代码块去进行逐行读取,就可以采用第二种方法。在方法二中,我们使用readlines()这个方法,readlines()方法从文件中读取每一行,并将其存储在一个列表中,然后我们使用lines存储这个列表就可以了,在以后的读取中,就可以直接脱离with代码块,直接对lines进行遍历。

2、文件路径的读取

  如果我们的hello.txt文件存在于一个叫做txt_file的文件夹中,我们可以使用相对路径来打开文件

 with open('txt_file/hello.txt') as file_hello:

  以上为OS X和Linux的打开方式,如果是windows下,需要使用“\”来指定路径

我们也可以使用绝对路径来读取文件,当相对路径找不到文件时,就可以使用绝对路径

 file_path = '/Users/yezhenxiang/PycharmProjects/Test/txt_file/hello.txt'
with open(file_path) as file_hello:

2、文件的写入

1、文件的单行写入

  我们仍然使用“hello.txt”文件,文件中的内容保持不变。现在,我们在文件中写入“hello demo”,代码如下:

 file_path = 'txt_file/hello.txt'
with open(file_path, 'w') as file_hello:
file_hello.write('hello demo')

  然后我们打开文件会发现文件中的内容变了

 hello demo

  上述的代码中我们仍然使用open()函数来实现,但是在函数内变成了两个实参,第一个是要打开的文件,第二个'w'表示要以写入的模式打开文件

  在使用w写入文件时,要注意的是在python会在返回文件对象前清空该文件,所以在执行完with open(file_path, 'w') as file_hello时,文件中的内容将会被清空。

2、以附加的方式写入文件

  写入文件时,在不同的场景下,我们可能希望代码不去清空文件中原来的内容,而是在原来文件的基础上附加去写入。这个时候,我们可以使用附加模式打开文件,代码如下:

 file_path = 'txt_file/hello.txt'
with open(file_path, 'a') as file_hello:
file_hello.write('\nhello python')

  在代码中,我们指定实参'a',以附加的模式去进行文件的写入,这样我们就不会去清空原来文件中的内容

运行后的结果:

hello demo
hello python

三、python之文件的处理的更多相关文章

  1. Python 判断文件是否存在的三种方法

    通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try ...

  2. 孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化

    孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.什么是序列化与反序列化 序列化是指将内存中的数据进行指 ...

  3. 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

     孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...

  4. 孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习

     孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.close() 当一个file对象执行此方法时,将关闭当前 ...

  5. 孤荷凌寒自学python第三十三天python的文件操作初识

     孤荷凌寒自学python第三十三天python的文件操作初识 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天开始自学python的普通 文件操作部分的内容. 一.python的文件打开 ...

  6. Python判断文件是否存在的三种方法

    通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try ...

  7. Python判断文件是否存在的三种方法【转】

    转:http://www.cnblogs.com/jhao/p/7243043.html 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先 ...

  8. 用python查看文件是否存在的三种方式

    目录 1.使用os模块 判断文件是否可做读写操作 2.使用Try语句 3. 使用pathlib模块 正文 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做 ...

  9. python计算文件的md5值

    前言 最近要开发一个基于python的合并文件夹/目录的程序,本来的想法是基于修改时间的比较,即判断文件有没有改变,比较两个文件的修改时间即可.这个想法在windows的pc端下测试没有问题. 但是当 ...

  10. Python :open文件操作,配合read()使用!

    python:open/文件操作 open/文件操作f=open('/tmp/hello','w') #open(路径+文件名,读写模式) 如何打开文件 handle=open(file_name,a ...

随机推荐

  1. C# form 传参数的几个方法

    方法一:传值最先想到的,Form2构造函数中接收一个string类型参数,即Form1中选中行的文本,将Form2的TextBox控件的Text设置为该string,即完成了Form1向Form2的传 ...

  2. JS 逻辑非!简单总结

    !""                  true!"aaa"          false""==false          true ...

  3. JS面向对象——组合使用构造函数模型与原型模型

    该模型为创建自定义类型最常用的方式. <!DOCTYPE html> <html> <head> <title>组合使用构造函数模型和原型模型</ ...

  4. UIWindow与UIView

    UIView与UIWindow * 一般应用程序只有一个UIWindow对象.所有的控件都是在UIWindow上展现的.每个UIView对象都有一个window属性,表示当前view显示在哪个窗体上. ...

  5. 03.LNMP架构-PHP源码包编译部署详细步骤

    一.环境准备 操作系统:CentOS_Server_7.5_x64_1804.iso 部署组件:yasm+libmcrypt+libvpx+tiff+libpng+freetype+jpeg+libg ...

  6. 115-基于TI TMS320DM6467T Camera Link 机器视觉 智能图像分析平台

    基于TI TMS320DM6467无操作系统Camera Link智能图像分析平台 1.板卡概述 该板卡是我公司推出的一款具有超高可靠性.效率最大化.无操作系统的智能视频处理卡,是机器视觉开发上的首选 ...

  7. pip命令一般使用

    pip类似RedHat里面的yum,安装Python包非常方便.本节详细介绍pip的安装.以及使用方法. 1.pip下载安装 1.1 pip下载   1 # wget "https://py ...

  8. python如何获取变量的变量名

    假设现在存在一个值为1变量名为a的变量,如何通过一个函数获取该变量的变量名a? 上面这个需求来源于某群友的一个要求,希望能有一个这样的函数来方便打印. 这个需求很扯淡啊,为什么不用格式化输出?它回复到 ...

  9. 【LeetCode】抽样 sampling(共4题)

    第一部分 水塘抽样 reservoir sampling 水塘抽样的原理:(应该开一篇新文章)pssss [382]Linked List Random Node (2018年11月15日,新算法) ...

  10. 【leetcode】1022. Sum of Root To Leaf Binary Numbers

    题目如下: Given a binary tree, each node has value 0 or 1.  Each root-to-leaf path represents a binary n ...