深度学习编程笔记1:Python中文件的读取与写入以及read(),readline(),readlines()区别

本文详细介绍了Python中文件的读写方法,包括with和open两种方式的使用,以及read(), readline(), readlines()的区别。同时,讲解了不同读写模式的特点,如w, w+, a, a+等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、读取整个文件

1. with方式

2. open方式

3. open()函数和with open()的异同点

4. 文件路径

5. 读取文件常用的三种方法的区别

二、文件的写入


一、读取整个文件

读取文件主要用到两个方式,即:

1. with方式

with open('文件名') as file_object:
    contents = file_object.read()
    
#表示逐行读取
    for line in file_object:
        print (line)

2. open方式

open方法直接打开并读取文件,不使用with语句,此方法直接读取文件,但是要记得关闭文件,我们要知道,我们操作的是什么,目的是什么,如果我们只是单纯的读取文件的内容,而不去修改它,那么就单纯使用open()方法,不用第二参数即可。函数open()接受一个参数:要打开文件的名称。

f = open('poem.txt')
    
    # 读取整个文件
contents = f.read()
print(contents)
 
    #组行读取
for line in f:
    print(line.strip())
 
    # 读取文件内容到一个列表中
lines = file_object.readlines()
print(lines)
f.close()


3. open()函数和with open()的异同点

  • with 语句在不再需要访问文件后将其关闭。让python自己判断什么时候该关闭,并自己去关闭。
  • 直接使用open()方法打开文件,要自己调用close()方法关闭文件。如果程序存在bug,导致close()语句未执行,文件将不会关闭。这看似微不足道,但未妥善地关闭文件可能会导致数据丢失或受损。如果在程序中过早地调用close(),我们会发现需要使用文件时它已关闭(无法访问),这会导致更多的错误。并非任何情况下都能轻松地确定关闭文件的恰当时机。
  • open()后是一个对象,这个对象有read()方法与write()方法。

4. 文件路径

在读取文件过程中涉及到文件路径,这里会提到相对路径和绝对路径。

如果被读取的文件在当前执行文件所在的目录中,就可以直接with open(‘文件名’),但是如果不在被执行文件夹下,就要涉及到相对复杂一点的路径读取。

根据文件的组织方式,有时可能要打开不在程序文件所属目录中的文件。例如,可能将程序文件存储在了文件夹Python_work中,而在文件夹Python_work中存在子文件夹text_file,其用于存储程序文件操作的文本文件。尽管文件夹Python_work中包含text_file文件,仅向open()传递位于该文件夹中的文件的名称不可以,源于Python只在文件夹Python_work中查找,而不胡在其子文件夹text_file中查找。这需要提供具体文件路径,应该标出相对路径:

with open('text_files\filename.txt') as file_object:

值得注意的是:在Windows系统中,在文件路径中使用反斜杠(\)而不是斜杠(/)。

如果相对路径走不通,那就使用绝对路径,如下:

file_path = 'C:\users\ehmidhih\other_files\text_file\filename.txt'
with open(file_path) as file_oject:

5. 读取文件常用的三种方法的区别

常常在读取文件时,会将read(),readline(),readlines()搞混,现对这三个方法做个总结:

#这是一个文本文件,命名为l.txt
if you have a dream
please try to do it
because dream is lovely
  • read([size])方法:从文件当前位置起读取size个字节,若无参数size,则表示读取至文件结束为止,它范围为字符串对象.
#read()方法
f = open("a.txt")
lines = f.read()
print(lines)
print(type(lines))
f.close()

输出结果为:

if you have a dream
please try to do it
because dream is lovely
<class 'str'>
  • readline()方法:从字面意思可以看出,该方法每次读出一行内容,所以,读取时占用内存小,比较适合大文件,该方法返回一个字符串对象。

小例子:

f = open('1.txt','r')
result = list()
for line in open('1.txt'):
    line = f.readline()
    print(line)
    result.append(line)
print(result)
f.close()

输出结果:

D:\anaconda\python.exe D:/pyworkspace/11/2018.12.17/lianxi0/0.2.py
if you have a dream

please try to do it

because dream is lovely
['if you have a dream\n', 'please try to do it\n', 'because dream is lovely']

Process finished with exit code 0
  • readlines()方法:读取整个文件所有行,保存在一个列表(list)变量中,该列表可以由Python的for in 结果进行处理,每行作为一个元素,但读取大文件会比较占内存。

运行代码:

f = open('1.txt', 'r')                   #以读方式打开文件
result = list()
for line in f.readlines():                          #依次读取每行
    line = line.strip()                             #去掉每行头尾空白
    if not len(line) or line.startswith('#'):       #判断是否是空行或注释行
        continue                                    #是的话,跳过不处理
    result.append(line)                             #保存
result.sort()                                       #排序结果
print(result)

运行结果:

D:\anaconda\python.exe D:/pyworkspace/11/2018.12.17/lianxi0/0.2.py
['because dream is lovely', 'if you have a dream', 'please try to do it']

二、文件的写入

  • 写模式w特点:(1)只能写,不能读;(2)写的时候会把原来文件的内容清空;(3)当文件不存在时,会创建新文件。
  • 写读模式w+特点:(1)可以写,也可以读;(2)写的时候会把原来文件的内容清空;(3)当文件不存在时,会创建新文件。
  • 追加模式a特点:(1)不能读;(2)可以写,是追加写,即在原内容末尾添加新内容;(3)当文件不存在时,创建新文件。
  • 追加读a+模式特点:(1)可读可写;(2)写的时候是追加写,即在原内容末尾添加新内容;(3)当文件不存在时,创建新文件。

下面对读写模式进行小结:

文件读写常用模式
r只能读
r+可读可写,不会创建不存在的文件,从顶部开始写,会覆盖之前此位置的内容
w只能写,覆盖整个原有文件(不要乱用),不存在则创建
w+可读可写,如果文件存在,则覆盖整个文件,不存在则创建
a只能写,从文件底部添加内容 不存在则创建
a+可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建

简单举个例子:

#W模式
filename = '1.txt'
with open (filename,'w') as file_object :
    file_object.write("i love you \n")
    file_object.write("thank you \n") # 加上\n可以一行一行的加入




#a模式

filename = '1.txt'
with open (filename,'a') as file_object :
    file_object.write(" you are cute \n")
    file_object.write("i love you \n") # 加上\n可以一行一行的加入

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值