python文件操作
1.字符串类型 str
在程序中用于表示文字信息,本质上是unicode编码中的二进制
name = ‘小明’
2.字节类型 bytes
表示文字信息,本质上是utf-8/gbk编码的二进制 对Unicode编码进行压缩 方便文件储存和网络传输
name = '小明'
字符串类型通过encode()函数转换成字节类型
字节类型通过decode()函数转换成字符串类型
name = '小明' data = name.encode('utf-8')print(data)data = data.decode('utf-8')print(data)
输出
C:\Users\AppData\Local\Programs\Python\Python39\python.exe D:/pythonProject2/demo/myweb/tests.py
b'\xe5\xb0\x8f\xe6\x98\x8e'
小明
Process finished with exit code 0
可表示原始二进制(图片,文件等信息)
1.1读文件
读文本文件
打开文件
参数 路径 相对路径 info.txt
绝对路径 c:/user/info.txt
参数 模式 r read
b 二进制 binary
#打开文件 fileobject = open('urls.py',model='rb') #读取文件的内容,并赋值给data data = fileobject.read() #关闭文件 fileobject.close() print(data) print(type(data))
打印:
b"from django.contrib import admin\r\nfrom django.urls import path, include\r\nfrom . import views\r\n\r\nurlpatterns = [\r\n #path('admin/', admin.site.urls),\r\n path('index/', views.index),\r\n #path('my_admin/', include('myweb.urls')),\r\n\r\n]"
<class 'bytes'>
结尾的\r 和\n
\r是回车(CR) ,将当前位置移到本行开头,ASCII码值(十进制)为013。
区别:
1、是否换行
'\r' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖;'\n' 换行,就是输入完一行内容后,光标转到下一行的起始位置 ,不会回到行首。
例如:printf("first line\n");
2、表现不同
Unix系统里,每行结尾只有“<换行>”,即"\n";Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;Mac系统里,每行结尾是“<回车>”,即"\r";。
3、不同系统打开会不同
Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
将读取的字节类型内容转换成字符串类型
#打开文件 fileobject = open('views.py',mode='rb') #读取文件的内容,并赋值给data data = fileobject.read() #关闭文件 fileobject.close()view = data.decode('utf-8') print(data) print('--------------------------------------------------------') print(view) print('--------------------------------------------------------') print(type(data))
输出:
b'from django.shortcuts import render\r\nfrom django.http import HttpResponse\r\n\r\n\r\n# Create your views here.\r\ndef index(request):\r\n return HttpResponse("nihao")'
--------------------------------------------------------
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("nihao")
--------------------------------------------------------
<class 'bytes'>
mode='rt' 直接读取文本内容 实质上还是先读二进制再转换
t 文本模式 (默认)。 |
#打开文件 fileobject = open('views.py', mode='rt', encoding='utf-8') #读取文件的内容,并赋值给data data = fileobject.read() #关闭文件 fileobject.close()#view = data.decode('utf-8') print(data) print('--------------------------------------------------------') #print(view) print('--------------------------------------------------------') print(type(data))
读图片等非文本内容文件
#打开文件 fileobject = open('20220404014621.png',mode='rb') #读取文件的内容,并赋值给data data = fileobject.read() #关闭文件 fileobject.close() print(data) print(type(data))
输出:
J\x9f\x8e|>\x98\xe1f\xda\x14\xd6\x0e\x18Z\x129\xe3M.#4c*\x06p3\x12\xdf\x00C\xcd\xfc\x88=\x86t\x14\xd2\xfc\xcc\xef\x15\x9d\xa6"\xa6\xe4\xe5\xe6\x12wP\xac]y\x90\x02\rH5\xd1:\x80C\xb5|\xf9\xac\xe1\xab\xa52\x18\xac\x99\x8bC\xd0\xb94R\xb3d\x8c]P\x8e1P\r\xfb\xd9_$\x9cj4\xd7Ot\'\xdf\xeb\x97k\xf0M\xd4\xd8\x94\xf3v\xebt\xf4\x963\xa9,
<class 'bytes'>
读文件时的注意事项
1:相对路径 要搞清楚现在的程序到底在哪里运行的 相对路径会在当前目录寻找 也就是python 解释器运行的目录查找文件
pwd 查询当前目录
绝对路径
Windows中写绝对路径容易出问题 \n \r绝对路径容易出现转义
两种解决方案 斜杠都用\\ 'D:\\pythonProject2\\demo\myweb'
绝对路径前加r r'D:\pythonProject2\demo\myweb'
读文件
确保文件存在
判断路径是否存在
import osexists = os.path.exists(r'D:\pythonProject2\demo\myweb') print(exists)
输出:
True
1.2写文件
写文件必须是字节类型两种写入方式
写文本文件
fileobject = open('views.py', mode='wb') 模式是wb 要求写入的内容是字节类型 fileobject.write('小王'.encode('utf-8')) 文本类型将字符串转换成字节类型 fileobject.close()
fileobject = open('views.py', mode='wt', encoding='utf-8')fileobject.write('小明') fileobject.close()
mode='w' 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
mode='a' 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。fileobject = open('views.py', mode='rt', encoding='utf-8') data = fileobject.read() print(data)
写图片文件
fileobject = open('20220404014621.png', mode='rb') data = fileobject.read() fileobject.close()fileobject = open('a.png',mode='wb') fileobject.write(data) fileobject.close()
基础案例
#多用户注册 #w写文件 会先清空 打开文件放在外面 只打开一次就不会发生清空 fileobject = open('views.py', mode='wt', encoding='utf-8') while True:user = input('请输入用户名:')if user.upper() == 'Q':breakpwd = input('请输入密码:')data = '{}-{}\n'.format(user, pwd)fileobject.write(data)fileobject.close()
输出:
C:\Users\AppData\Local\Programs\Python\Python39\python.exe D:/pythonProject2/demo/myweb/tests.py
请输入用户名:jhgjk
请输入密码:452353
请输入用户名:jkhkjl35423
请输入密码:jhgvbj
请输入用户名:q
Process finished with exit code 0
#如何利用python向某个网址发送请求并获取结果 #利用第三方模块 下载第三方模块#去网上下载文本,写入本地文件 pip install requests #headers = {#'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5' #} import requests headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5' } res = requests.get(url="https://blog.csdn.net/Dick633/article/details/106817238", headers=headers)file_object = open('views.py',mode='wb') file_object.write(res.content) file_object.close()
注意事项
相对路径 绝对路径
w 模式文件不存在创建 文件存在清空后写入
读文件 文件不存在报错
1.3文件打开模式
r read 读 默认
w 文件不存在创建 存在清空后写
x 文件不存在创建写入 存在报错
a 文件不存在创建 存在尾部追加
不能独立存在 必须指定文本模式t 或 二进制模式b
t 文本模式 默认
b 二进制模式
+
只读
r rt rb
不存在 报错
存在 读取
只写
w wt wb
存在 清空写
不存在 创建写
只写
x xt xb
存在 报错
不存在 创建写
只写
a at ab 尾部追加
存在 尾部追加
不存在 创建写尾部追加
读写模式
r+ == rt+ rb+ 默认光标 起始位置
rt+
file_object = open('views.py', mode='rt+', encoding='utf-8') file_object.read() file_object.write('小王') file_object.close()读写会改变文件中的光标位置 光标位置会被读写操作改变
w+ wt+ wb+ 默认光标起始位置
读取永远是空 想要读取数据用 file_object.seek(0) 将光标重置到文件开头
x+ xt+ xb+ 默认光标新文件起始位置(新文件)
a+ at+ ab+ 默认光标文件尾部
文本文件读写一定要加上编码
#多用户注册案例 file_object = open('views.py', mode='at', encoding='utf-8') while True:user = input('yonghuming:')if user.upper() == 'Q':breakpwd = input('mima:')data = '{}-{}\n'.format(user, pwd)file_object.write(data) file_object.close()file_object = open('views.py', mode='rt', encoding='utf-8') data = file_object.read() file_object.close() print(data)
1.4文件操作常见功能
读 没关闭文件之前 会改变光标位置 一定要注意
读所有:
f.read()
filr_objrct = open('views.py', mode='rt', encoding='utf-8') data = filr_objrct.read() filr_objrct.close()filr_objrct = open('views.py', mode='rb') data = filr_objrct.read() filr_objrct.close()
读n个字节:
读一个字节 filr_objrct = open('views.py', mode='rb') data = filr_objrct.read(1) filr_objrct.close()
filr_objrct = open('views.py', mode='rb') data = filr_objrct.read(3) filr_objrct.close() print(data.decode('utf-8')) #print(data.decode('unicode_escape'))
输出:
C:\Users\AppData\Local\Programs\Python\Python39\python.exe D:/pythonProject2/demo/myweb/tests.py
rt-小王-2345
小
Process finished with exit code 0
增加一个错误分析
Traceback (most recent call last):
File "D:\pythonProject2\demo\myweb\tests.py", line 331, in <module>
print(data.decode('utf-8'))
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 0-1: unexpected end of data
filr_objrct = open('views.py', mode='rb') data = filr_objrct.read(2) #由于文件里开头是’小王‘ 小 占三个字节 filr_objrct.close() print(data.decode('utf-8'))所以取两个字节就会在转换的时候报错 #print(data.decode('unicode_escape'))
正确的方式:
filr_objrct = open('views.py', mode='rt', encoding='utf-8') data = filr_objrct.read(1) filr_objrct.close() print('rt-{}'.format(data))filr_objrct = open('views.py', mode='rb') data = filr_objrct.read(3) filr_objrct.close() print(data.decode('utf-8')) #print(data.decode('unicode_escape'))
输出:
C:\Users\AppData\Local\Programs\Python\Python39\python.exe D:/pythonProject2/demo/myweb/tests.py
rt-小
小
Process finished with exit code 0
读取整行 注意光标位置 f.readlone()filr_objrct = open('views.py', mode='rt', encoding='utf-8') data = filr_objrct.readline() filr_objrct.close() print('rt-{}'.format(data))filr_objrct = open('views.py', mode='rb') data = filr_objrct.readline() filr_objrct.close() print(data.decode('utf-8'))
输出:
rt-小王-2345
小王-2345
f.readlines() 返回一个列表 每一行就是一个列表元素
当文件很大想要一行一行读取
filr_objrct = open('views.py', mode='rt', encoding='utf-8') for line in filr_objrct:print(line) filr_objrct.close()print('-----------------------------------') print('-----------------------------------')filr_objrct = open('views.py', mode='rb') for line in filr_objrct:print(line) filr_objrct.close()
输出:
小王-2345
1354
15421
15241321
14651321
-----------------------------------
-----------------------------------
b'\xe5\xb0\x8f\xe7\x8e\x8b-2345\r\n'
b'1354\r\n'
b'15421\r\n'
b'15241321\r\n'
b'14651321\r\n'
Process finished with exit code 0
剔除换行 空格 制表符
filr_objrct = open('views.py', mode='rt', encoding='utf-8') for line in filr_objrct:print(line.strip()) filr_objrct.close()print('-----------------------------------') print('-----------------------------------')filr_objrct = open('views.py', mode='rb') for line in filr_objrct:print(line) filr_objrct.close()
输出:
小王-2345
1354
15421
15241321
14651321
-----------------------------------
-----------------------------------
b'\xe5\xb0\x8f\xe7\x8e\x8b-2345'
b'1354'
b'15421'
b'15241321'
b'14651321'
f.write() 不是立即将内容写入文件,而是在系统的缓冲区内
缓冲区会定时定量将内容刷到硬盘文件中 具体什么时候刷你是不知道的
f.flush() 将缓冲区内的内容刷到硬盘
移动段光标位置
f, seek()
对于utf-8来讲一个汉字是三个字节
f.seek(n) 移动光标到指定字节位置 不论文件打开模式是什么 一定是字节
filr_objrct = open('views.py', mode='rt+', encoding='utf-8')filr_objrct.seek(3)filr_objrct.write('小虎')filr_objrct.flush()filr_objrct.seek(0)data = filr_objrct.read()filr_objrct.close()print(data)
write写入会从光标位置开始覆盖内容
输出:
123小虎5421
15241321
14651321
注意如果是以a模式打开在写的时候永远是尾部添加
a模式写入会先将光标移到尾部再写入,
f.tell()
filr_objrct = open('views.py', mode='rt+', encoding='utf-8')print(filr_objrct.tell())filr_objrct.write('小虎')print(filr_objrct.tell())filr_objrct.seek(0) data = filr_objrct.read() filr_objrct.close() print(data)
输出:
0
6
小虎789
15241321
14651321
读
注意注意
t模式下光标位置不确定
由于模式不同,文本内容不同光标位置会不同
filr_objrct = open('views.py', mode='rt+', encoding='utf-8')print(filr_objrct.tell())filr_objrct.read(2) #一个中文3字节 这里是t文本模式 读了两个中文字符所以光标位置跑到了6如果前两个不是中文光标位置就不是6 而是2print(filr_objrct.tell())filr_objrct.seek(0) data = filr_objrct.read() filr_objrct.close() print(data)
输出:
0
6
小虎789
15241321
14651321
文本内容不同开头是数字,导致读后光标位置是2
filr_objrct = open('views.py', mode='rt+', encoding='utf-8')print(filr_objrct.tell())filr_objrct.read(2)print(filr_objrct.tell())filr_objrct.seek(0) data = filr_objrct.read() filr_objrct.close() print(data)
输出:
0
2
123456小虎789
15241321
14651321
b模式读几个字节光标位置是确定的,不会因为文本内容不同而变化,文字数字字母都一样
filr_objrct = open('views.py', mode='rb')print(filr_objrct.tell())filr_objrct.read(2)print(filr_objrct.tell())filr_objrct.seek(0) data = filr_objrct.read() filr_objrct.close() print(data)
输出:
0
2
b'123456\xe5\xb0\x8f\xe8\x99\x8e789\r\n15241321\r\n14651321\r\n'
1.5上下文管理
每次打开一个文件都要关闭
with open('views.py', mode='rt+', encoding='utf-8') as f1:pass
上下文管理代码执行完毕,自动实现文件的关闭
2.7python之后支持同时打开多个文件
with open('views.py', mode='rt+', encoding='utf-8') as f1, open('urls.py', mode='rt+', encoding='utf-8'):pass
文件内容替换 用两个文件 一个文件读 一个文件写
with open('views.py', mode='rt', encoding='utf-8') as read_file_object, open('text.txt', mode='wt',encoding='utf-8') as write_file_object:for line in read_file_object:new_line = line.replace('and', 'but')write_file_object.write(new_line)import shutil shutil.move('text.txt', 'views.py') 将文件1 重命名为 文件2 并且将原来的文件2删除
python文件操作相关推荐
- 初学Python——文件操作第二篇
前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...
- python关闭读写的所有的文件-Python文件操作:文件的打开关闭读取写入
Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...
- Python文件操作学习总结
Python读写文件 1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open( ...
- 【Python】学习笔记总结3(Python文件操作)
文章目录 三.Python文件操作 1.打开`open('文件名','打开模式')` 2.写操作 3.读操作 4.With上下文管理对象 小结 案例 5.文件定位 三.Python文件操作 1.打开o ...
- python文件操作实验总结,[干货分享]Python文件操作技巧总结
引言 小伙伴们,今天给大家讲解一下python程序下的文件操作完整技巧梳理,都是笔者总结的干货.通过本文阅读,不仅可以带来生产力提升,也可以开发小脚本为生活带来乐趣. 首先不知道大家对 ...
- 关于python文件操作
关于python文件操作 总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当 ...
- Python文件操作与函数目录
文件操作 python文件操作 函数 Python函数学习--初步认识 Python函数学习--作用域与嵌套函数 Python函数学习--匿名函数 python内置函数 Python函数学习--递归 ...
- python文件操作的方法_python文件操作的方法介绍
文件操作 1.open()函数 open()函数主要用于文件处理,一般分为下面3个过程:1.打开文件 2.操作文件 3.关闭文件 常见的格式示例:f = open('note.txt','r') f. ...
- python打开鼠标指定文件夹_学会python文件操作,鼠标好像没用了,学习python第10天...
电影是人类对未来的向往,在<黑客帝国>中,我们看到了一个数字化的社会,而当你学会python文件操作,你也就离你向往的黑客近一点了,用程序来直接影响电脑上的其他文件,只需要几行代码就搞定. ...
- python对文件操作的相关函数_第六章、Python文件操作
第六章.Python文件操作 Python可以对文件进行查看.创建等功能,可以对文件内容进行添加.修改.删除,且所使用到的函数在Python3.5.x为open,在Python2.7.x同时支持fil ...
最新文章
- 第二讲:Android系统构架分析和应用程序目录结构分析
- Visual C++ 2008入门经典 第十五章 在窗口中绘图
- 商业周刊:Facebook为何价值100亿美元(转)
- java: 十六进制转八进制
- 收藏老外的jquery web 按钮插件
- 选择Java密码算法第1部分-散列
- 力扣—— 295. 数据流的中位数(困难)
- 微信小程序 解决disableScroll无法禁止小程序下拉的问题和视频铺满全屏尺寸
- atitit。全局变量的设计与实现 java php的异同
- 计算机二级c语言的书籍,全国计算机二级c语言
- Spring Boot + OAuth2 统一认证SSO单点登录
- java工程师项目简历_java软件工程师岗位项目经历怎么写
- 620集成显卡和mx250_英伟达mx250和英特尔uhd620显卡那个好?
- 电脑死机的原因和防止方法
- C语言写三子棋,冲冲冲!
- php中文的正则表达式_php 正则表达式匹配中文汉字
- eve虚拟机服务器如何配置,EVE-NG在VMware Workstations环境部署 | IT运维网
- 移动应用界面设计的尺寸规范
- fedora下使用飞信
- 如何防御UDP攻击?
热门文章
- Microsoft Office 2021 简体中文正式版下载
- VOS防盗打,防攻击的一些看法
- 安装HP P1008打印机经历
- 15分钟破解保险箱!美国小哥200美元自制开锁机器人
- 手机语音混响软件_Tone2 UltraSpace(音频混响软件)
- 使用matplotlib画色斑图
- 勤哲excel服务器端口协议,用勤哲Excel服务器实现管理完整.doc
- 虹软人脸识别java调用依赖Cant‘t find dependent library错误,需安装vc2013运行环境
- GET data:image/jpg;base64,35,37,....... net::ERR_INVALID_URL
- JavaScript实现消消乐-源代码