三、python之文件的处理
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之文件的处理的更多相关文章
- Python 判断文件是否存在的三种方法
通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try ...
- 孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化
孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.什么是序列化与反序列化 序列化是指将内存中的数据进行指 ...
- 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容
孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...
- 孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习
孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.close() 当一个file对象执行此方法时,将关闭当前 ...
- 孤荷凌寒自学python第三十三天python的文件操作初识
孤荷凌寒自学python第三十三天python的文件操作初识 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天开始自学python的普通 文件操作部分的内容. 一.python的文件打开 ...
- Python判断文件是否存在的三种方法
通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try ...
- Python判断文件是否存在的三种方法【转】
转:http://www.cnblogs.com/jhao/p/7243043.html 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先 ...
- 用python查看文件是否存在的三种方式
目录 1.使用os模块 判断文件是否可做读写操作 2.使用Try语句 3. 使用pathlib模块 正文 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做 ...
- python计算文件的md5值
前言 最近要开发一个基于python的合并文件夹/目录的程序,本来的想法是基于修改时间的比较,即判断文件有没有改变,比较两个文件的修改时间即可.这个想法在windows的pc端下测试没有问题. 但是当 ...
- Python :open文件操作,配合read()使用!
python:open/文件操作 open/文件操作f=open('/tmp/hello','w') #open(路径+文件名,读写模式) 如何打开文件 handle=open(file_name,a ...
随机推荐
- [转载]Redux原理(一):Store实现分析
写在前面 写React也有段时间了,一直也是用Redux管理数据流,最近正好有时间分析下源码,一方面希望对Redux有一些理论上的认识:另一方面也学习下框架编程的思维方式. Redux如何管理stat ...
- Vue打包后访问静态资源路径问题
Vue介绍中static文件夹里放的是静态资源目录,如图片.字体等. 我们发现运行npm run start后本地图片路径是没问题的,但是打包上传后会怎么样呢? 我们知道,执行npm run buil ...
- weblogicjsp编译:查看编译后的java中间代码
转自:https://www.xuebuyuan.com/1069484.html 运行自己配置的web应用,往往只能看见weblogic编译之后的class文件.而看不见编译前的java的文件.为了 ...
- tomcat常用功能
修改端口号 1024-655365 之间取端口号 Tomcat有3个重要端口: 默认访问端口:8080 默认监听关闭tomcat的端口:8005 默认AJP访问端口:8009 vim tomcat/c ...
- 六 BASH 高级变量
高级变量分为三类 变量扩展 ${变量名} 例 ${filename} 大括号 命令替换 $(命令) $(ls /) 小括号 算术扩展 $((算数式)) $(( ...
- fork/join并发编程
Fork & Join 的具体含义 Fork 一词的原始含义是吃饭用的叉子,也有分叉的意思.在Linux 平台中,函数 fork()用来创建子进程,使得系统进程可以多一个执行分支.在 Java ...
- NIO摘录
NIO,一种基于通道和缓冲区的I/O方式,可以使用native函数库直接分配堆外内存,然后通过一个存储在java 堆的DirectBteBuffer对象作为这块内存的引用进行操作,避免了再java堆和 ...
- SAP固定资产(FI-AA),一网打尽(转)
在固定资产模块的边缘,游荡了四五年的时间了,细细数来,固定资产这个熟悉又抽象的东西(熟悉是由于天天接触常常听说,抽象是具体到系统实现上有些复杂并且常遇到问题),好像也没有多少东西. 1) SAP固定资 ...
- jmeter 参数化3_User Defined Variables(用户自定义变量)
User Defined Variables: 一般用于Test Plan中不需要随请求迭代的参数设置,如:Host.Port Number 操作路径:Thread Group-->Add-- ...
- hdu 4235 容斥原理模板题
题目大意: 输入样例个数T,每个样例输入三个数a,b,n,求[a,b]之间与n互素的个数 基本思路: 互斥,想想这个:AUBUC=A+B+C-A∩B-A∩C-B∩C+A∩B∩C fac存的是n的素因数 ...