python 学习笔记(文件读写)

我们开发程序,经常需要从文本文件中读入信息,也经常需要写入文本信息到文件中。

在python语言中,我们要读写文本文件,首先通过内置函数open打开一个文件。

open函数会返回一个对象,我们可以称之为文件对象。

这个返回的文件对象就包含读取文件内容写入文本内容的方法。

文件的打开,分为文本模式二进制模式

文本模式

通常,对文本文件,都是以文本模式打开。

文本模式打开后,我们的程序读取到的内容都是字符串对象,写入文件时传入的也是字符串对象。
*

复制代码
###### open函数的参数

要读写文件,首先要通过内置函数open打开文件,获得文件对象。

函数open的参数如下:

```python
open(
    file, 
    mode='r', 
    buffering=-1, 
    encoding=None, 
    errors=None, 
    newline=None, 
    closefd=True, 
    opener=None
    )
    
    """
    1.file - 指定了要打开文件的路径。
    2.mode - 指定了文件打开的模式,打开文件的模式 决定了可以怎样操作文件。
    常用的打开模式有:
    r  只读文本模式打开,这是最常用的一种模式。
    w  只写文本模式打开
    a  追加文本模式打开
    3.encoding - 指定了读写文本文件时,使用的字符编解码方式。
    
    """

    
```
复制代码
###### 写文件示例

mode参数为'w',表示要覆盖写文件。这就意味着,如果原来文件中有内容,该模式打开文件后,文件中所有的内容都会被\*\*!!!删除掉!!!\*\*,所以要特别的小心。

有的场合下,我们需要在文件末尾添加新的内容,而不是删掉原来的内容重新写。这时,我们可以用追加模式a打开。

```python
#写入
f = open('test.txt','w',encoding='utf-8')
f.write('哈喽,很高兴认识你~')
f.close()
```

```python
#读取
f = open('test.txt','r',encoding='utf-8')
content = f.read()
print(content)
f.close()
```

```python
#追加
f = open('test.txt','a',encoding='utf-8')
f.write(',想跟你做朋友')
f.close()
```

**注意点**

read函数有参数size,读取文本文件的时候,用来指定这次读取多少个字符。如果不传入该参数,就是读取文件中所有的内容。

读取文本文件内容的时候,通常还会使用\*\*readlines方法,该方法会返回一个列表。\*\*列表中的每个元素依次对应文本文件中每行内容。

但是这种方法,列表的每个元素对应的字符串最后有一个换行符。**如果你不想要换行符,可以使用字符串对象的splitlines方法。**
with 语句

如果我们开发的程序,在进行文件读写之后,忘记使用close方法关闭文件,就可能造成意向不到的问题。

我们可以使用with语句打开文件,就不需要我们调用close方法关闭文件。Python解释器会帮我们调用文件对象的close方法。

python 复制代码
with open('test1.txt','w',encoding='utf-8') as f:
    f.write('祝你生日快乐!!!')
写入缓冲
python 复制代码
import time

with open('test1.txt','w',encoding='utf-8') as f:
    time.sleep(30)
    f.write('祝你生日快乐!!!')

原来,我们执行write方法写入字节到文件中的时候,其实只是把这个请求提交给操作系统。

操作系统为了提高效率,通常并不会立即把内容写道存储文件中,而是写入内存的一个缓冲区

等缓冲区的内容堆满之后,或者程序调用close关闭文件对象的时候,再写入到文件中。

如果你确实希望,在调用write之后,立即把内容写到文件里面,可以使用文件对象的flush方法。

python 复制代码
with open('test1.txt','w',encoding='utf-8') as f:
    
    f.write('身体健康')
    #立即把内容写入到文件里面
    f.flush()

后续待发,期待一下吧~

相关推荐
__如风__9 小时前
onlyoffice文档转换服务离线部署
python
今晚务必早点睡9 小时前
写一个Python接口:发送支付成功短信
开发语言·python
ada7_9 小时前
LeetCode(python)22.括号生成
开发语言·数据结构·python·算法·leetcode·职场和发展
2501_941871459 小时前
面向微服务链路追踪与全局上下文管理的互联网系统可观测性设计与多语言工程实践分享
大数据·数据库·python
luoluoal9 小时前
基于python的语音和背景音乐分离算法及系统(源码+文档)
python·mysql·django·毕业设计·源码
love530love9 小时前
EPGF 新手教程 12在 PyCharm(中文版 GUI)中创建 Poetry 项目环境,并把 Poetry 做成“项目自包含”(工具本地化为必做环节)
开发语言·ide·人工智能·windows·python·pycharm·epgf
cute_ming9 小时前
从 Node.js + TypeScript 无缝切换到 Python 的最佳实践
python·typescript·node.js
2501_941870569 小时前
从配置频繁变动到动态配置体系落地的互联网系统工程实践随笔与多语言语法思考
java·前端·python
民乐团扒谱机9 小时前
【微实验】数模美赛备赛MATLAB实战:一文速通各种“马尔可夫”(Markov Model)
开发语言·人工智能·笔记·matlab·数据挖掘·马尔科夫链·线性系统
西西弗Sisyphus9 小时前
Python FastAPI 和 Uvicorn 同步 (Synchronous) vs 异步 (Asynchronous)
python·fastapi·uvicorn