Python学习之文件的创建与写入详解
作者:渴望力量的哈士奇 发布时间:2021-03-07 09:27:06
在前面章节我们通过 os包学习了如何创建、读取一个文件夹,但是并没有学习如何创建、读写一个文件,接下来我们就学习关于文件的处理。当我们学习完文件处理之后,就可以随意读写文件。
内置函数 - open 获取文件对象
open() 函数
open()函数是是python的读写文件的基本函数,它可以生成文件对象可以创建,也可以操作文件的读写。
用法:
open(path, mode)
参数说明:
path:文件路径
mode:操作模式;比如读文件的模式,写文件的模式。下文有详细介绍
返回值:
文件对象
示例用法如下:
file = open('d://test.txt', 'w')
# >>> 代码释义:使用 open() 函数 对 D 磁盘下的 'test.txt' 文件执行写入的操作 ( w 为写入的操作 ) 并赋值给变量 file
利用文件对象进行创建与写入
文件操作的写入模式
模式 | 介绍 |
---|---|
w | 创建文件(w为写入的操作,当文件不存在时,则会创建文件;已创建文件,则内容会被覆盖) |
w+ | 创建文件并读取文件 |
wb | 二进制形式创建文件(与 w 的功能相同,只不过 web 的写入类型为 byte ) |
wb+ | 二进制形式创建或追加内容(如果文件存在不会覆盖原本的内容,而是以 byte 类型进行追加) |
a | 在文件中追加内容,如果没有该文件则会创建文件 |
a+ | 读写模式追加(同样是追加内容,只不过赋予了读取的功能) |
ab+ | 二进制形式读写追加(可以追加并读取 byte 类型的模式) |
文件对象的写入操作方法
方法名 | 参数 | 介绍 | 举例 |
---|---|---|---|
write | Message(字符串) | 写入信息 如果是带有b的模式,则会变为 byte 类型 | f.write(‘hello\n’) |
writelines | Message_list(列表) | 批量写入 列表内须是字符串,按照索引位置依次写入; 若为b的模式,同上 | f.writelines([‘a\n’, ‘b\n’]) |
close | 无 | 关闭并保存文件 | f.close() |
注意:操作文件完成后,必须使用 close 方法!!!不然可能会造成内存占用,如果反复生成文件对象进行写入操作,可能会造成内存溢出,我们的程序就会出问题了。
使用 w 模式 执行 write 方法
import os
import os.path
current_path = os.getcwd()
# print(current_path)
file_test = open(current_path + '/' + 'test.txt', 'w', encoding='utf-8')
# 注意如果是在WIN系统,在写入中文时,需要设置编码格式;如果不是WIN系统,则不需要设置编码格式
file_test.write('Python 是一门优雅的编程语言')
file_test.close()
上文脚本我们提及,如果是在WIN系统,在写入中文时,需要设置编码格式。如果不设置编码格式,虽然不会报错,也可以写入成功。但是打开写入的文件,就如同下图:
我们继上面演示的案例,在 text.txt 文件的基础上,继续演示 w 模式的功能。
import os
import os.path
current_path = os.getcwd()
# print(current_path)
file_test = open(current_path + '/' + 'test.txt', 'w', encoding='utf-8')
file_test.write('Python 是一门优雅的编程语言')
file_test.close()
file_path = os.path.join(current_path, 'test.txt')
file_test = open(file_path, 'w', encoding='utf-8')
file_test.write('Python 不仅是一门优雅的编程语言,还不掉头发')
可以看到我们针对 text.txt 文件的基础上,继续演示的 w 模式 新传入的 Python 不仅是一门优雅的编程语言,还不掉头发 已经覆盖了 text.txt 文件原本的内容。
使用 w+ 模式 执行 write 方法
这里我们先 利用 w+ 模式 写入内容
import os.path
current_path = os.getcwd()
file_path = os.path.join(current_path, 'test.txt')
file_test = open(file_path, 'w+', encoding='utf-8')
file_test.write('人生苦短 我用Python')
file_test.close()
区别于 w 模式,w+ 模式 不仅可以创建文件,还可以读取文件。下面我看看看 如何 读取文件。(需要注意的是,读取的操作需要在终端操作,Pycharm 不显示读取的结果)
import os.path
current_path = os.getcwd()
file_path = os.path.join(current_path, 'test.txt')
file_test = open(file_path, 'w+', encoding='utf-8')
file_test.write('人生苦短 我用Python')
file_test.read()
file_test.seek(0)
file_test.read()
file_test.close()
注意:只有 w+ 模式可以使用 read() 与 seek() 函数 读取文件内容 ,w 模式使用 read() 函数 读取文件内容会报错 ,如下图:
使用 ab 模式 执行 write 方法
我们先 使用 ab 模式 尝试将 字符串 通过 write 方法以追加的形式写入文件
import os.path
current_path = os.getcwd()
file_path = os.path.join(current_path, 'test.txt')
file_test = open(file_path, 'ab')
file_test.write('Python 是一种很有意思的编程语言')
终端执行效果如下:
由于我们传入的是 字符串类型 ,无法直接追加写入文件,那么我们 将字符串转为 byte 类型是否能成功呢?
这又是为何?难道我们使用方法的姿势不对?其实不然,这里写入的 byte 类型 我们需要先转为 byte 类型 才可以成功的写入。示例如下:
此时我们再次执行写入的动作,就可以将其追加写入文件。
file_test.write(_message)
file_test.close()
使用 a 模式 执行 writelines 方法
借着上面演示的案例,我们定义一个列表的字符串,然后 通过 open() 函数 的 a模式,使用 writelines 方法将内容写入文件
import os.path
current_path = os.getcwd()
file_path = os.path.join(current_path, 'test.txt')
file_list = ['\n今天天气不错\n', '挺风和日丽的\n', '我们下午没有课\n']
file_test = open(file_path, 'a')
file_test.writelines(file_list)
file_test.close()
执行效果如下图:
实战小案例
需求:实现一个可以自动创建 python 包 的函数
import os
def create_package(path):# 定义一个创建 包 的函数
if os.path.exists(path):# 判断路径是否存在,若已经存在,则抛出异常
raise Exception('%s 已经存在,不可创建' % path)
else:
os.mkdir(path)
init_path = os.path.join(path, '__init__.py')
file_init = open(init_path, 'w', encoding='utf-8')
file_init.write('# coding:utf-8\n')
file_init.close()
if __name__ == '__main__':
current_path = os.getcwd()
path = os.path.join(current_path, 'test_package')
create_package(path)
执行结果如下:
拓展:从上文脚本中,我们可以发现每次,执行写入的时候,都要写入 \n 换行符,很是麻烦,我们可以自定义一个 open 类,从而实现每次我们执行写入操作时的自动换行。
class Open(object):
def __init__(self, path, mode='w', is_return=True): # 这里的 is_return 我们定义的是换行的意思,结合下文的 message 理解
self.path = path
self.mode = mode
self.is_return = is_return
def write(self, message):
file_test = open(self.path, mode=self.mode)
if self.is_return: # 如果返回 Ture 则 在 message 后,增加换行符
message = '%s\n' % message
file_test.write(message)
file_test.close()
if __name__ == '__main__':
current_path = os.getcwd()
# path = os.path.join(current_path, 'test_package')
open_path = os.path.join(current_path, 'test_new_line.txt')
# create_package(path)
# create_package(open_path)
open_test = Open(open_path)
open_test.write('这是一段测试换行符的字符串信息')
执行结果如下:
来源:https://blog.csdn.net/weixin_42250835/article/details/123675274
猜你喜欢
- 本文实例讲述了Python实现简单的文本相似度分析操作。分享给大家供大家参考,具体如下:学习目标:1.利用gensim包分析文档相似度2.使
- 当鼠标移动上去后,字慢慢的变大的 效果应该 如果实现啊<!DOCTYPE html PUBLIC "-//W3C//DTD
- PHP mysqli_rollback() 函数关闭自动提交,做一些查询,提交查询,然后回滚当前事务:<?php// 假定数据库用户名
- 1.open使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。fi
- 目录一、Python GUI 编程简介二、流行GUI框架总结三、代码演示四、界面一、Python GUI 编程简介Tkinter 模块(Tk
- 读取nc数据相关信息#导入库import netCDF4from netCDF4 import Dataset#读取数据文件nc
- 演示示例使用QQ邮箱发送邮件,先获取自己的QQ邮箱的授权码。因为后面发送邮件时需要使用自己的授权码作为邮箱的密码登录邮箱最后达到发送邮件的目
- 1。总体概要kNN算法已经在上一篇博客中说明。对于要处理手写体数字,需要处理的点主要包括: (1)图片的预处理:将png,jpg等格式的图片
- 关于变量分箱主要分为两大类:有监督型和无监督型对应的分箱方法:A. 无监督:(1) 等宽 (2) 等频 (3) 聚类B. 有监督:(1) 卡
- 使用sql语句删除数据库中重复记录的两个方法如下:方法一declare @max integer,@id in
- 目录socket概念socket基本用法创建tcp套接字创建udp套接字socket内建方法实现端口扫描总结socket概念socket又称
- 这几天有一台MySQL数据库服务器出现了频繁的掉线情况,通过排查,并没有排查出哪个网站被攻击,百思不得其解中的时候,群里有个朋友说是因为微软
- mysql是linux平台下最流行的数据库系统,今天介绍的是mysql的安装及简单的操作方法!groupadd mysql //建立mysq
- 本文实例讲述了Python及Django框架生成二维码的方法。分享给大家供大家参考,具体如下:一、包的安装和简单使用1.1 用Python来
- Anaconda是Python的一个开源发行版本,主要面向科学计算,预装了丰富强大的库。使用Anaconda可以轻松管理多个版本的Pytho
- 在实际的项目中,我们一般都会建立三个环境:开发、测试和生产环境,这三种环境会使用不同的配置组合,为了能方便地切换配置,我们可以为不同的环境创
- 需求细化:1.身份证必须能够通过身份证校验程序。2.通过查询,发现身份证号码是有国家标准的,标准号为 GB 11643-1999 可以从百度
- 最近看到N多介绍CSS框架,前些天我说过一句话:“在我有限的视野里,还没见到可以真正可以称得上css框架的东东~”,当然也可能是我的视野太小
- sys模块提供了与python解释器紧密相关的一些变量和函数。sys部分常用函数函数说明path获取模块文件搜索路径的字符串,或临时指定新搜
- 本文实例讲述了pymongo实现控制mongodb中数字字段做加法的方法。分享给大家供大家参考。具体分析如下:这个非常实用,比如我们需要给文