Python文件输入输出


本文以.txt文件为例,说明Python从.txt文件中读取内容和向.txt文件写入内容的方法。
a.txt文件内容:

犬吠水声中,桃花带雨浓。
树深时见鹿,溪午不闻钟。
野竹分青霭,飞泉挂碧峰。
无人知所去,愁倚两三松。

文件输入

读取文件:

open(filename, mode)

open返回一个文件对象。第一个参数是一个包含文件名的字符串。第二个参数是描述文件的使用模式,mode='r’表示只读,mode='w’表示只写,mode=‘r+’表示可读可写,mode=‘a’表示打开文档并把要写的内容附在文档末尾,不会删除文档已有内容。默认模式为’r’。

poem = open('./a.txt', 'r')
print(poem)

# 输出
# <_io.TextIOWrapper name='./a.txt' mode='r' encoding='UTF-8'>
poem = open('./a.txt', 'r')
print(list(poem))

# 输出
# ['犬吠水声中,桃花带雨浓。\n', '树深时见鹿,溪午不闻钟。\n', '野竹分青霭,飞泉挂碧峰。\n', '无人知所去,愁倚两三松。\n']

通常我们使用with关键字来读取文件对象,with关键字可以在with语句结束后自动关闭文件,避免一直占用计算机内存资源。

with open('./a.txt', 'r') as f:
    d = f.read()
    print(d)
print(f.closed)

# 输出
# 犬吠水声中,桃花带雨浓。
# 树深时见鹿,溪午不闻钟。
# 野竹分青霭,飞泉挂碧峰。
# 无人知所去,愁倚两三松。
# True

除了读取文件中的所有内容,我们还可以一行一行的读取文件。

with open('./a.txt') as f:
    for line in f:
        print(line)

# 输出
# 犬吠水声中,桃花带雨浓。

# 树深时见鹿,溪午不闻钟。

# 野竹分青霭,飞泉挂碧峰。

# 无人知所去,愁倚两三松。

因为在每一行末尾处都带有换行符,因此每行之间都有一行为空。可以验证一下:

with open('./a.txt') as f:
    d = f.readlines()
    print(d)

# 输出
# ['犬吠水声中,桃花带雨浓。\n', '树深时见鹿,溪午不闻钟。\n', '野竹分青霭,飞泉挂碧峰。\n', '无人知所去,愁倚两三松。\n']

我们可以通过str.strip([chars])函数来删除字符串末尾的换行符。strip()函数可以删除字符串首尾的指定字符或者字符串,参数chars指定了要删除的字符的集合。如果没有指定,则默认为空格或者换行符。但是strip()只能删除开头或者结尾的字符或字符串,不能删除中间部分的字符。

with open('./a.txt') as f:
    for line in f:
        print(line.strip())

# 输出
# 犬吠水声中,桃花带雨浓。
# 树深时见鹿,溪午不闻钟。
# 野竹分青霭,飞泉挂碧峰。
# 无人知所去,愁倚两三松。

因为字符串是不可变对象,因此,strip()函数并不是在原来的字符串中直接进行删除,而是将删除首尾字符后的字符串作为一个新对象并返回。可以验证一下:

a = '  special  ' # 创建一个字符串对象并将变量a指向它
print(id(a)) # 打印a在内存中的地址
a = a.strip() # 将删除首尾空格后的字符串作为一个新对象,并将a指向它
print(id(a)) # 打a串在内存中的地址

# 输出
# 140251513494960
# 140251513470680

可得看到,删除前后的字符串地址并不相同,说明它们是不同的对象。

文件输出

with open('./a.txt', 'a') as f:
    f.write('作者:李白\n')

with open('./a.txt', 'r') as f:
    for line in f:
        print(line.strip())

# 输出
# 犬吠水声中,桃花带雨浓。
# 树深时见鹿,溪午不闻钟。
# 野竹分青霭,飞泉挂碧峰。
# 无人知所去,愁倚两三松。
# 作者:李白
  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值