目录:

  • open函数
  • 文件的打开方式
  • 文件的读取、写入方式
  • 实现文件copy功能
  • csv文件的读写
  • 序列化与反序列化
  • json字符串
  • pickle模块的使用
  • json和pickle的区别

open函数

在python中我们用内置函数open()来打开文件并获取文件对象

open函数的参数如下:

  • file:用来指定打开的文件(不是文件的名字,而是文件的路径)
  • mode:打开文件时的模式,默认是 rt 表示只读文本
  • encoding:打开文件时的编码方式
  • newline:换行符

路径介绍

  • 绝对路径:从电脑盘符开始的路径。
  • 相对路径:当前文件所在文件夹开始的路径。
    对于相对路径,./ 可以省略不写,表示当前文件夹, ../ 表示回到上一级文件夹

open函数会有一个返回值,即打开文件的对象

简单举例:
我们在代码文件的同一个文件夹下建立xxx.txt,内容为hello world

#在windows操作系统里,默认使用gbk编码格式打开文件
file=open('xxx.txt',encoding='utf8')#此时的路径为相对路径
print(file.read())#read()方法读取文件里的全部内容
file.close()# 操作完成之后,关闭文件

结果

hello world

关于路径分隔符的一些说明
在Windows系统里,文件夹之间使用 \ 分隔
在非Windows系统里,文件夹之间使用 / 分隔
在python的字符串里, \ 表示转义字符
python程序路径书写的三种方式:1.\\ 2. r’’ 3. ‘/’(推荐)

可以使用os模块下的sep属性查看当前系统的路径分隔符

import os
print(os.sep)

结果:

\            #Windows系统下的路径分隔符

文件的打开方式(mode):



代码举例:

file=open('yyy.txt',mode='w+',encoding='utf8')
file.write('哈哈哈')
#操作文件指针的方法,当我们写入内容之后,文件指针指到最后
#需要调用seek方法将文件指针重置到开头
file.seek(0,0)

注意:我们一般不调用读写都可以的模式,这样文件指针的位置对于我们来说非常不方便,建议一次操作要么只读,要么只写

文件的读取、写入方式:

相关方法如下:

  • file.read([size])
    从文件读取指定的字节数(或字符数),如果未给定或为负则读取所有。
  • file.readline([size])
    读取整行,包括 “\n” 字符。
  • file.readlines([sizeint])
    读取所有行并返回列表(里面包括换行符等特殊字符),若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。
  • file.close()
    关闭文件。关闭后文件不能再进行读写操作。
  • file.flush()
    刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
  • file.seek(offset[, whence])
    设置文件当前位置
  • file.tell()
    返回文件当前位置。
  • file.write(str)
    将字符串写入文件,返回的是写入的字符长度。
  • file.writelines(sequence)
    向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

代码举例:

文本内容如下:

举例1:

file=open('yyy.txt',encoding='utf8',mode='rt')#模式为只读文本形式
print(file.read())#不指定参数则读取全部内容
file.close()

结果:

hello python
哈哈哈
嘻嘻嘻
我爱你 祖国

举例2:

file=open('yyy.txt',encoding='utf8',mode='rt')#模式为只读文本形式
print(file.read(20))#因为读取模式为只读文本形式,这里的参数20为读取20个字符,若读取模式为二进制,则读取的是20字节
file.close()

结果:

hello python
哈哈哈
嘻嘻嘻

举例3:

file=open('yyy.txt',encoding='utf8',mode='rt')#模式为只读文本形式
print(file.readline())#不指定参数则读取全部内容
print(file.readline())
file.close()

结果:

hello python哈哈哈

举例4:
注意:readline()会把换行符也读出来!

file=open('yyy.txt',encoding='utf8',mode='rt')#模式为只读文本形式
while True:content=file.readline()print(content)if content == '':break
file.close()

结果:

hello python哈哈哈嘻嘻嘻我爱你 祖国

举例5:

file=open('yyy.txt',encoding='utf8',mode='rt')#模式为只读文本形式
content=file.readlines()#此方法将每一行当作列表的一个元素,最终返回列表,也会读取每行末的换行符
print(content)
file.close()

结果:

['hello python\n', '哈哈哈\n', '嘻嘻嘻\n', '我爱你 祖国']

实现文件copy功能

处理文件名的两种方式

方式一:

rpartition()方法
代码举例:

file_name=input('请输入文件名')
names=file_name.rpartition('.')
print(names)
new_file_name=names[0]+'.bak.'+names[2]
print(new_file_name)

结果:

请输入文件名hello.txt
('hello', '.', 'txt')
hello.bak.txt

方式二:

os.path.splitext()方法,将文件名和后缀名分隔并以元组的形式返回
代码举例:

import os
file_name=input('请输入文件名')
names=os.path.splitext(file_name)
print(names)
new_file_name=names[0]+'.bak.'+names[1]
print(new_file_name)

结果:

请输入文件名hello.hi.txt
('hello.hi', '.txt')
hello.hi.bak..txt

二进制拷贝

import osfile_name=input('请输入一个文件路径')
if os.path.isfile(file_name):old_file=open(file_name,'rb') # 以二进制的形式读取文件names=os.path.splitext(file_name)new_file_name=names[0]+'.bak.'+names[1]new_file=open(new_file_name,'wb') # 以二进制的形式写入文件# 这里默认将拷贝、被拷贝文件写到同意文件夹下while True:content=old_file.read(1024) #一次读取1024字节new_file.write(content)if not content:breaknew_file.close()old_file.close()
else:print('您输入的文件不存在')

csv文件的读写

CSV文件: Comma-Separated Values分中文叫逗号分隔值或者字符分割值,其文件以纯文本的形式存储表格数据。可以把它理解为一个表格,只不过这个表格是以纯文本的形式显示的,单元格与单元格之间,默认使用逗号(半角)进行分隔;每行数据之间,使用换行进行分隔。

姓名,年龄,性别,城市
张三,18,男,北京
李四,18,男,上海
小明,19,男,广州
小美,20,女,深圳

python中通过csv模块进行相应的操作。

csv文件的写入:

import csv # 系统内置模块
#以写入的方式打开一个csv文件
file=open('demo.csv','w',encoding='utf8',newline='')#newline=''不换行
#调用writer方法,传入csv文件对象,得到的结果是一个CSVWriter对象
w=csv.writer(file)
#调用CSVWriter对象的writerow方法,一行一行写入数据
w.writerow(['name','age','score','city'])
#调用CSVWriter对象的writerows方法,一次性写入多行数据
w.writerows([['张三','18','100','广东'],['李四','19','95','天津'],['王五','18','95','大连']])
file.close()#必须关闭流!

结果:

name,age,score,city
张三,18,100,广东
李四,19,95,天津
王五,18,95,大连

csv文件的读入

import csv # 系统内置模块
file=open('C:/Users/86199/Desktop/新建文本文档.csv','r',encoding='utf8',newline='')
#得到的是一个可迭代对象
r=csv.reader(file)
for data in r:print(data)
file.close()

结果:

['姓名', '年龄', '性别', '城市']
['张三', '18', '男', '北京']
['李四', '18', '男', '上海']
['小明', '19', '男', '广州']
['小美', '20', '女', '深圳']

序列化与反序列化

通过文件操作,我们可以将字符串写入到一个本地文件。但是,如果是一个对象(例如列表、字典、元组等),就无法直接写入到一个文件里,需要对这个对象进行序列化,然后才能写入到文件里。
设计一套协议,按照某种规则,把内存中的数据转换为字节序列,保存到文件,这就是序列化,反之,从文件的字节序列恢复到内存中,就是反序列化。
Python中提供了JSON和pickle两个模块用来实现数据的序列化和反序列化。

json字符串

当我们使用write方法时,只能写入字符串或者二进制

字典、列表、数字等都不能直接写入到文件里

将数据转换成为字符串:repr/str 使用json模块

json本质就是字符串,区别在于json里要是用双引号表示字符串
例:’[“张三”,“李四”,“王五”]’ #这就是一个json字符串

json序列化的两个方法:

  • dumps:将数据转换成为json字符串里,不会将数据保存到文件里
  • dump:将数据转换成为json字符串的同时写入到指定文件
代码举例:
import jsonnames=['zhangsan','lisi','jack','tony']
x=json.dumps(names)
print(x)

结果:

["zhangsan", "lisi", "jack", "tony"]

import jsonnames=['zhangsan','lisi','jack','tony']
file=open('names.txt','w',encoding='utf8')
json.dump(names,file)#将names写入到指定的文件中
file.close()

json反序列化的两个方法

  • loads:将json字符串加载成为python里的数据
  • load:读取文件,把读取的内容加载成为python里的数据
代码举例:
x='{"name":"zhangsan","age":18}'#复合json规则的字符串
p=json.loads(x)
print(p['name'])

结果:

zhangsan

file1=open('names.txt','r',encoding='utf8')
y=json.load(file1)
print(y)

结果:

['zhangsan', 'lisi', 'jack', 'tony']

pickle模块的使用:

将python里的任意的对象转换成为二进制

序列化:

  • dumps:将数据转换成为二进制
  • dump:将数据转换成为二进制的同时写入到指定文件

反序列化:

  • loads:将二进制加载成为python里的数据
  • load:读取文件,把读取的内容加载成为python里的数据
代码举例:
import pickle
names=['张三','李四','杰克','亨利']
b_names=pickle.dumps(names)
print(b_names)

结果:

b'\x80\x04\x95)\x00\x00\x00\x00\x00\x00\x00]\x94(\x8c\x06\xe5\xbc\xa0\xe4\xb8\x89\x94\x8c\x06\xe6\x9d\x8e\xe5\x9b\x9b\x94\x8c\x06\xe6\x9d\xb0\xe5\x85\x8b\x94\x8c\x06\xe4\xba\xa8\xe5\x88\xa9\x94e.'

import pickle
file=open('names.txt','wb')
file.write(b_names)
file.close()file1=open('names.txt','rb')
x=file1.read()
y=pickle.loads(x)
print(y)
file1.close()

结果:

['张三', '李四', '杰克', '亨利']

将自定义对象进行序列化与反序列化(二进制)

class Dog(object):def __init__(self,name,color):self.name=nameself.color=colordef play(self):print(self.name+'正在玩')
d=Dog('小哈','黑白色')#保存到文件里
pickle.dump(d,open('dog.txt','wb'))#从文件里加载出来
dd=pickle.load(open('dog.txt','rb'))
print(dd.name)
dd.play()

结果:

小哈
小哈正在玩

json和pickle的区别



结束,因作者水平有限,如有错误还请指出!

python文件操作快速入门相关推荐

  1. 【Python零基础快速入门系列 | 03】AI数据容器底层核心之Python列表

    • 这是机器未来的第7篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/124957520 <Python零基础快速入门 ...

  2. 【Python零基础快速入门系列 | 07】浪漫的数据容器:成双成对之字典

    这是机器未来的第11篇文章 原文首发链接:https://blog.csdn.net/RobotFutures/article/details/125038890 <Python零基础快速入门系 ...

  3. Python零基础速成班-第8讲-Python文件操作File IO、高级文件处理模块shutil、CSV、JSON、多线程基础

    Python零基础速成班-第8讲-Python文件操作File I&O.高级文件处理模块shutil.CSV.JSON.多线程基础 学习目标 文件操作File I/O 高级文件处理模块shut ...

  4. Python基础——第八章:Python文件操作

    前言 本文是根据黑马程序员Python教程所作之笔记,目的是为了方便我本人以及广大同学们查漏补缺. 不想做笔记直接来我的频道.当然啦,自己的笔记才是最好的哦! PS:感谢黑马程序员! 教程链接:黑马程 ...

  5. python文件操作实验总结,[干货分享]Python文件操作技巧总结

    引言 小伙伴们,今天给大家讲解一下python程序下的文件操作完整技巧梳理,都是笔者总结的干货.通过本文阅读,不仅可以带来生产力提升,也可以开发小脚本为生活带来乐趣.         首先不知道大家对 ...

  6. 不是python文件操作的相关函数_从零开始学Python(七):文件存储I/O流和异常捕捉

    这两天在搞小程序开发,耽搁了一下更新的进度,今天补上.一个完整的前端程序肯定离不开数据存储和网络两个模块,今天我们就先来讲讲python中的一种常见数据存储:文件存储!~! 文件存储(I/O操作) 何 ...

  7. PDF转CAD怎么弄?PDF文件转换快速入门

    PDF转CAD怎么弄?相信大家在做设计的时候肯定遇到过这种情况,就接到一个室内设计的项目,由于面积较大,或者形状不规则,现场量尺比较麻烦,善解人意的甲方提供了原建筑图纸,当你满心欢喜的收到图纸后,却发 ...

  8. 【python文件操作之利用os筛选出想要的数据集】

    [python文件操作之利用os筛选出想要的数据集] 文章目录 [python文件操作之利用os筛选出想要的数据集] 前言 一.OS模块是什么? 二.使用步骤 1.引入库 2.读入数据 3.观察数据, ...

  9. 【Python数据科学快速入门系列 | 04】Numpy四则运算、矩阵运算和广播机制的爱恨情仇

    这是机器未来的第43篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/126493989 文章目录 1. 概述 2. 四则运算 ...

  10. 【Python编程】九、Python文件操作

    欢迎关注博主 Mindtechnist 或加入[Linux C/C++/Python社区]一起探讨和分享Linux C/C++/Python/Shell编程.机器人技术.机器学习.机器视觉.嵌入式AI ...

最新文章

  1. 1.我和python的第一次亲密接触
  2. CSS3实现小黄人动画
  3. python继承方式是基于原型吗_[译] 为什么原型继承很重要
  4. ansible的介绍和一些基本模块介绍
  5. psftp查看服务器上的文件,PSFTP自动登录SFTP服务器,上传指定文件...
  6. html5 apple 没有声音,通过AppleALC,轻松解决黑苹果没声音问题
  7. base ring shell skirt skirt 压力容器_压力容器工程规定(中英文版)
  8. 管理信息系统MIS复习总结
  9. linux中firewalld之direct rules和rich rules(转发,伪装)
  10. css图片颜色设置为黑白
  11. [微软拼音小技巧] 如何用Unicode输入生僻字
  12. 基于javaFX的固定资产管理系统
  13. jieba和wordcloud红楼梦人物出现次数生成词云
  14. 前端基础——URL详解
  15. 概率论与数理统计学习笔记——第二讲——概率(2.3概率的基本性质)
  16. xcode各项配置详解
  17. 未来计算图鉴:十年后的计算长什么模样?
  18. 台达cp2000的面板怎么调节_台达CP2000系列变频器参数设置
  19. 2023 年 4 月脚本神器合集来了
  20. 解决 1044 - Access denied for user ‘root‘@‘%‘ to database ‘xxxxxx‘ 问题

热门文章

  1. 苹果iPhone手机怎么恢复备份?详细iOS备份怎么恢复教程
  2. vsftpd匿名登陆连接报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()(未解决)
  3. 利用python批量查询企业信息_Python 实现批量查询域名可用性
  4. Flutter Navigator路由传参
  5. win7连接远程桌面时出现黑屏的解决方法(亲测有效)——终于找到解决办法了
  6. 【思维导图】redis详解
  7. matlab 拟合 画图,用MatLab画图(最小二乘法做曲线拟合)
  8. (result, consumed) = self._buffer_decode(data, self.errors, final)报错
  9. 云栖社区Markdown指南【2018版】
  10. dkp管理系统 php,RB!DKP v3.1.8 Build