Python文件操作:读写文件数据

计算机文件分为文本文件和二进制文件,本文介绍文本文件的数据读写方法,如txt,word等都是文本文件。

一、读取整个文件内容

file.read()可以读取整个文件的内容,并以字符串形式返回。
with关键字可以自动打开和关闭文件,不需要额外调用close()关闭文件。
注意如果文件中有汉字,需要设置编码格式,可参考文章 https://blog.csdn.net/qq_43799400/article/details/118423961

代码示例:读取test.txt的全部内容并输出。
test.txt内容如下:
在这里插入图片描述

with open("test.txt") as file:
    whole_content=file.read()
print(whole_content)

print内容:

abddefg    
hijklmn
opq   rst
uvw   xyz
i love you

相比于原始文件,输出的末尾多了一行空行。这是因为read()到达文件末尾时返回了一个空字符串,显示出来就是一个空行。要删除这个空行,可以调用python内置函数rstrip()实现。

rstrip()用于删除字符串末尾的指定字符,默认为空格。

代码示例:

with open("test.txt") as file:
    whole_content=file.read()
whole_content=whole_content.rstrip()
print(whole_content)

print内容:

abddefg    
hijklmn
opq   rst
uvw   xyz
i love you

可以发现,空行已经被删除。

二、逐行读取文件内容

方法一

代码示例:

with open("test.txt") as file:
   for line in file:
       print(line.rstrip())

print内容:

abddefg
hijklmn
opq   rst
uvw   xyz
i love you

此处调用rstrip()方法的原因也是删除字符串末尾的空格。

方法二:readlines()方法

readlines() 方法用于读取文件中的所有行,并以列表形式返回。
列表是可迭代的,因此可以采用for循环输出每一行。

代码示例:

with open("test.txt") as file:
   lines=file.readlines()
   for line in lines:
       print(line.rstrip())

print内容:

abddefg
hijklmn
opq   rst
uvw   xyz
i love you

三、读写模式

python提供了不同的文件读写模式:
‘r’ :读取模式
‘r+’ :读写模式。
‘w’ :写入模式。如果写入的文件不存在,则会自动创建文件。若文件以及存在且文件中有数据,则会先清除文件内容再写入。
‘a’ :附加模式。在文件末尾添加内容,在写入时不会清除原文件内容。
注意python只能将字符串写入文本文件,所以要将数值数据存储到文件中,必须先使用str()方法将其转换为字符串格式。

四、将数据写入文件:write()方法

代码示例:

with open("new.txt",'w') as newfile:    # 自动创建new.txt
    with open("test.txt") as file:
       lines=file.readlines()
       for line in lines:
           newfile.write(line)
            
# 此时new.txt已经自动关闭,引出需要重新打开文件才能读取数据
with open("new.txt",'r') as f:
    content=f.read()
print(content.rstrip())    # 输出new.txt的全部内容用以验证

print内容:

abddefg    
hijklmn
opq   rst
uvw   xyz
i love you

五、读取文件内容并写入另一个文件

enumerate()方法可以逐行读取文件内容,并返回行数和每一行的内容。具体解释和用法可参考文章 https://blog.csdn.net/qq_43799400/article/details/118423961

代码示例:逐行读取test.txt的内容并将前三行内容写入到new.txt中。

with open("new.txt", 'w') as newfile:    # 此处a和w模式的效果是一样的
    with open("test.txt",'r') as file:
        for index,line in enumerate(file):
            if index <= 2:
                newfile.write(line)

# 此时new.txt已经自动关闭,引出需要重新打开文件才能读取数据
with open("new.txt",'r') as f:
    content=f.read()
print(content.rstrip())

print内容:

abddefg    
hijklmn
opq   rst

注意:
(1)在这个程序中,“with open(“new.txt”, ‘w’) as newfile:” 写在了最外面,若将这一行写在“ with open(“test.txt”,‘r’) as file:”里面,则每次都会重新打开new.txt进行数据写入,要想数据不被覆盖,必须用’a’附加模式打开new.txt文件。且频繁对文件进行打开和关闭对于硬盘并不友好(容易导致硬盘损坏),尤其对于数据很多的文件,频繁读取文件会导致耗时较长,因此应尽量减少文件操作的次数。

(2)enumerate()方法可以很容易地控制写入文件的行数,是一种读取文件的好方法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ctrl A_ctrl C_ctrl V

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值