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文件操作相关推荐

  1. 初学Python——文件操作第二篇

    前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...

  2. python关闭读写的所有的文件-Python文件操作:文件的打开关闭读取写入

    Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...

  3. Python文件操作学习总结

    Python读写文件 1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open( ...

  4. 【Python】学习笔记总结3(Python文件操作)

    文章目录 三.Python文件操作 1.打开`open('文件名','打开模式')` 2.写操作 3.读操作 4.With上下文管理对象 小结 案例 5.文件定位 三.Python文件操作 1.打开o ...

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

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

  6. 关于python文件操作

    关于python文件操作 总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当 ...

  7. Python文件操作与函数目录

    文件操作 python文件操作 函数 Python函数学习--初步认识 Python函数学习--作用域与嵌套函数 Python函数学习--匿名函数 python内置函数 Python函数学习--递归 ...

  8. python文件操作的方法_python文件操作的方法介绍

    文件操作 1.open()函数 open()函数主要用于文件处理,一般分为下面3个过程:1.打开文件 2.操作文件 3.关闭文件 常见的格式示例:f = open('note.txt','r') f. ...

  9. python打开鼠标指定文件夹_学会python文件操作,鼠标好像没用了,学习python第10天...

    电影是人类对未来的向往,在<黑客帝国>中,我们看到了一个数字化的社会,而当你学会python文件操作,你也就离你向往的黑客近一点了,用程序来直接影响电脑上的其他文件,只需要几行代码就搞定. ...

  10. python对文件操作的相关函数_第六章、Python文件操作

    第六章.Python文件操作 Python可以对文件进行查看.创建等功能,可以对文件内容进行添加.修改.删除,且所使用到的函数在Python3.5.x为open,在Python2.7.x同时支持fil ...

最新文章

  1. 第二讲:Android系统构架分析和应用程序目录结构分析
  2. Visual C++ 2008入门经典 第十五章 在窗口中绘图
  3. 商业周刊:Facebook为何价值100亿美元(转)
  4. java: 十六进制转八进制
  5. 收藏老外的jquery web 按钮插件
  6. 选择Java密码算法第1部分-散列
  7. 力扣—— 295. 数据流的中位数(困难)
  8. 微信小程序 解决disableScroll无法禁止小程序下拉的问题和视频铺满全屏尺寸
  9. atitit。全局变量的设计与实现 java php的异同
  10. 计算机二级c语言的书籍,全国计算机二级c语言
  11. Spring Boot + OAuth2 统一认证SSO单点登录
  12. java工程师项目简历_java软件工程师岗位项目经历怎么写
  13. 620集成显卡和mx250_英伟达mx250和英特尔uhd620显卡那个好?
  14. 电脑死机的原因和防止方法
  15. C语言写三子棋,冲冲冲!
  16. php中文的正则表达式_php 正则表达式匹配中文汉字
  17. eve虚拟机服务器如何配置,EVE-NG在VMware Workstations环境部署 | IT运维网
  18. 移动应用界面设计的尺寸规范
  19. fedora下使用飞信
  20. 如何防御UDP攻击?

热门文章

  1. Microsoft Office 2021 简体中文正式版下载
  2. VOS防盗打,防攻击的一些看法
  3. 安装HP P1008打印机经历
  4. 15分钟破解保险箱!美国小哥200美元自制开锁机器人
  5. 手机语音混响软件_Tone2 UltraSpace(音频混响软件)
  6. 使用matplotlib画色斑图
  7. 勤哲excel服务器端口协议,用勤哲Excel服务器实现管理完整.doc
  8. 虹软人脸识别java调用依赖Cant‘t find dependent library错误,需安装vc2013运行环境
  9. GET data:image/jpg;base64,35,37,....... net::ERR_INVALID_URL
  10. JavaScript实现消消乐-源代码