文件处理,文件的三种打开模式,绝对路劲和相对路径,with管理网文件上下文,文件的高级应用,文件的修改,登陆注册。

摘要:
#encoding指定写入的编码格式打开文件之后,文件不仅占用了内存,他还对应了操作系统打开的以文件,相当于使用文本编辑器打开了一个文件。文件存在,则在文件的末端写入内容;文件不存在的时候会创建文件后写入内容。绝对路径:从盘符开始D:上海python12期视频python12期视频day09est.py相对路径:执行文件的文件夹下的文件名,执行文件和打开文件属于同一文件夹下4.with管理网文件上下文。

1.文件处理

什么是文件处理:修改存储的信息。

什么是文件:操作系统提供的虚拟概念,存储信息(用二进制存储信息)

操作核心是:读和写。

1.1操作文件的流程:

1.打开文件流程:1.文件路径",2.打开模式(w-->write ,at追加值)",3."字符编码(utf-8,gbk...)

1.2在硬盘中读取数据:

如果我们需要打开一个文件,需要向操作系统发起请求,要求操作系统打开文件,占用操作系统资源。Python中使用open()方法可以打开某个具体的文件,open()方法内写入文件路径。

open(r'D:上海python12期视频python12期视频day 09	est.py','w',encoding='utf8') # encoding指定写入的编码格式

打开文件:

f = open(r'F:python12期上海上课内容day09	est.py','w',encoding='utf8')  #创建了一个文件。
# encoding指定写入的编码格式

打开文件之后,文件不仅占用了内存,他还对应了操作系统打开的以文件,相当于使用文本编辑器打开了一个文件。并且我们说了我们操控文件只是为了读和写,因此打开文件并不是目的,读和写才是目的,接下来我们尝试如何读写文件。

  • r : 文件的读取操作 (只读) 若没有要读取得文件则报错
# read模式打开文件
f = open(r"E:pyrhon7期课上随写题day9	est.py","r",encoding="utf-8")# encoding指定写入的编码格式
data = f.read()
print(data)  #打开文件后,给个变量,可以读取其中的值。
# 读取文件内容,向操作系统发起读请求,会被操作系统转成具体的硬盘操作,将内容由硬盘读入内存
data = f.read()
print(data)
# 由于Python的垃圾回收机制只回收引用计数为0的变量,但是打开文件还占用操作系统的资源,所以我们需要回收操作系统的资源资源
# del f 只是回收变量f
f.close()  ## 告诉操作系统关闭文件
1.3写入数据

w : 文件的写入操作 没有该文件则创建,每一次写入都会清空文件再写入

(w-->清空写入)

#write  模式打开文件   wt: 只写(w清空文件后写入),不可读
f = open(r"E:pyrhon7期课上随写题day9	est.py","wt",encoding="utf-8")# encoding指定写入的编码格式
f.write("""我爱你亲爱的
姑娘""")
f.flush()  # 快速保存,你可以不使用
f.close()# 告诉操作系统关闭文件
f = open(r"E:pyrhon7期课上随写题day9	est.py","r",encoding="utf-8")
data = f.read()
print(data)  #我爱你亲爱
              #的姑娘
1.4文件的操作流程:
1.打开文件: wt: 只写(w清空文件后写入),不可读
f = open(r'F:python12期上海上课内容day09	est.py','w',encoding='utf8')  #创建了一个文件。
# encoding指定写入的编码格式
# 2. 修改/读取文件
f.write('''
我爱你亲爱的
姑娘
''')
# 3. 保存文件
f.flush()  # 快速保存,你可以不使用

# 4. 关闭文件: python真的能操控文件?python通过操作系统操作文件
# del f
f.close()  # 告诉操作系统关闭文件

2.文件的三种打开模式

2.1文件打开模式之r模式

r: read,只读模式,只能读不能写,文件不存在时报错

读取:r -->read:文件的读取(只读) rt --> read text。

#  rt  read_text 读文本内容 只读
f = open(r"E:pyrhon7期课上随写题day9	est.py","rt",encoding="utf-8")# encoding指定写入的编码格式
# f.write("""我爱你亲爱的
姑娘""")
data = f.read()
print(data) #我爱你亲爱的姑娘            w时:计算字符串的长度:8
print(f.readable()) # 判断是否可读 Ture  w时:false
print(f.writable()) # 判断是否可写 False w时:Ture


#####:
# data = f.read()  # 读取所有文本内容
# print(data)

2.2文件打开模式之w模式

w:write 只能写,不能读,文件存在的时候回清空文件后再写入内容;文件不存在的时候会创建文件后写入内容。

# 1.文件的写入操作  w  wt: 只写(w清空文件后写入),不可读
# (1) 打开文件
f = open("ceshi1.txt",mode="w",encoding="utf-8") #打开冰箱
# encoding指定写入的编码格式
# (2) 写入内容
'''write("字符串")'''
f.write("把大象塞进去") #放进大象
# (3) 关闭文件
f.close() #把冰箱门关上

2.3文件打开模式之a模式

a: 可以追加。文件存在,则在文件的末端写入内容;文件不存在的时候会创建文件后写入内容。

# at  # at: 只写入(追加写入)
f = open('liangjing.txt', mode='at', encoding='utf8')
# encoding指定写入的编码格式
print(f"f.readable(): {f.readable()}")
f.write('Owen 真帅呀
')  # '
'是换行符
f.write('Owen,Owen, you drop, I drop.')
f.write('Owen 帅的我五体投地')
f.close()
#: f.readable(): False

encoding指定写入的编码格式:

# encoding指定写入的编码格式
f = open(r"E:pyrhon7期课上随写题day9	est.py","at",encoding="utf-8")
f = write("你好")
f = open(r"E:pyrhon7期课上随写题day9	est.py","at",encoding="utf-8")
# print(f.read())

2.4打开文本的两种方法

t --> 文本; b --> 二进制模式: 这两个东西不单独使用,一般与r/w/a联用,不需要encoding

# f = open(r'D:上海python12期视频python12期视频day 09	est.py', 'rb')
# print(f.read())

# b模式一般用于图片/音频/视频的保存
import requests

response = requests.get('http://photocdn.sohu.com/20120708/Img347586981.jpg')
data = response.content  # 拿到图片的二进制
# print(data)

# w和a模式可以自动创建文件
f = open(r'D:上海python12期视频python12期视频day 09	est.jpg', 'wb')

3.绝对路劲和相对路径。

绝对路径: 从盘符开始 D:上海python12期视频python12期视频day 09 est.py

相对路径: 执行文件(当前运行的文件)的文件夹下的文件名,执行文件和打开文件属于同一文件夹下

4.with管理网文件上下文。

之前我们使用open()方法操作文件,但是open打开文件后我们还需要手动释放文件对操作系统的占用。但是其实我们可以更方便的打开文件,即Python提供的上下文管理工具——with open()。

with open('34a.txt', 'rt', encoding='utf8') as f:
    print(f.read())

with open()方法不仅提供自动释放操作系统占用的方法,并且with open可以使用逗号分隔,一次性打开多个文件,实现文件的快速拷贝。

with open('34a.txt', 'rt', encoding='utf8') as f,open('35r.txt', 'wb') as fw:
f.write(f.read())

5.文件的高级应用。

# wt
with open('liangjing.txt', 'wt', encoding='utf-8') as fw:
    print(fw.readable())   #False
    print(fw.writable())   #Ture
    
# w+t  可写可读 w+ 和 w 没有任何区别
with open('liangjing.txt', 'w+t', encoding='utf-8') as fw:
    print(fw.readable()) #Ture
    print(fw.writable())  #Ture
    
# r+t
with open('liangjing.txt', 'r+t', encoding='utf-8') as fr:
    print(fr.readable())
    print(fr.writable())
    
# 可写可读 a+ a模式默认光标在尾部
# with open('liangjing.py','a+',encoding='utf8') as fw:
#     print(fw.readable())
#     print(fw.writable())
#     fw.seek(0,0)
#     print(fw.read())

注意

  • tell() 返回的是当前光标左侧所有的 字节 数
  • seek() 调整指针的位置(里面的参数代表 字节 个数)
    • seek(0) 将光标直接移动到文件的 开头
    • seek(0,2) 将光标直接移动到文件的 末尾
  • read() 读取字符的个数(里面的参数代表 字符 个数)
    • 如果打开的模式是b字节流模式,读取的单位是字节;如果正常打开,读取的是字符数
  • 怎么能让文件自动关闭?
    • with... 打开文件 as... 文件别名
  • 函数参数里放字节数的,要注意中文,如果移动的位置不是一个完整的中文,会报错

6.文件的修改:

1.方式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)

import os

with open('37r.txt') as fr, 
        open('37r_swap.txt', 'w') as fw:
    data = fr.read()  # 全部读入内存,如果文件很大,会很卡
    data = data.replace('tank', 'tankSB')  # 在内存中完成修改

    fw.write(data)  # 新文件一次性写入原文件内容

# 删除原文件
os.remove('37r.txt')
# 重命名新文件名为原文件名
os.rename('37r_swap.txt', '37r.txt')
print('done...')

2.方法二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件。

import os

with open('37r.txt') as fr,
        open('37r_swap.txt', 'w') as fw:
    # 循环读取文件内容,逐行修改
    for line in fr:
        line = line.replace('jason', 'jasonSB')
        # 新文件写入原文件修改后内容
        fw.write(line)

os.remove('37r.txt')
os.rename('37r_swap.txt', '37r.txt')
print('done...')

7.登陆注册

注册

# count = 0
# while count < 3:
#     username_inp = input('请输入你的用户名:')
#     pwd_inp = input('请输入你的密码:')
#     re_pwd_inp = input('请在此输入你的密码:')
#
#     if not pwd_inp == re_pwd_inp:
#         print('两次密码输入不一致')
#         count += 1
#         continue
#
#     with open('user_info.txt', 'a', encoding='utf8') as fa:
#         fa.write(f'{username_inp}:{pwd_inp}
')  # :表示用户名和密码的分割;|用户和用户之间的分割
#         fa.flush()
#         break

登陆:

username_inp = input('请输入你的用户名:')
pwd_inp = input('请输入你的密码:')

with open('user_info.txt', 'r', encoding='utf8') as fr:
    for user_info in fr:
        username, pwd = user_info.split(':')

        if username.strip() == username_inp and pwd.strip() == pwd_inp:  # strip可以去掉两端的换行符
            print('登录成功')
            break
        # else:
        #     continue  # continue一般不写在最后一行
    else:
        print('登录失败')

免责声明:文章转载自《文件处理,文件的三种打开模式,绝对路劲和相对路径,with管理网文件上下文,文件的高级应用,文件的修改,登陆注册。》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇03 Zabbix4.0添加cisco交换机基本监控步骤Python学习之路_day_04(字符串与列表的内置方法)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VUE路径问题

import: html文件中,通过script标签引入js文件。而vue中,通过import xxx from xxx路径的方式导入文件,不光可以导入js文件。“xxx”指的是为导入的文件起一个名称,不是指导入的文件的名称,相当于变量名。“xxx路径”指的是文件的相对路径. src下有components,router文件夹和App.vue文件,comp...

vue-cli —— 项目打包及一些注意事项

打包方法: 1.把绝对路径改为相对路径:打开config/index.js 会看到一个build属性,这里就是我们打包的基本配置了。在这里可以修改打包的目录,打包的文件名。最重要的是一定要把绝对目录改为相对目录。即:把assetsPublicPath:'/' 改为assetsPublicPath:'./' 2.在当前工程文件下使用命令:npm run b...

什么是零拷贝

 1、名词介绍   内核:操作系统的核心   用户空间:指的是用户进程的运行空间   内核空间:指的是内核的运行空间   用户态:如果进程运行在用户空间就是用户态   内核态:如果进程运行在内核空间就是内核态   DMA拷贝:     对一个IO操作而言,是通过CPU发出对应的指令来完成的,但是相比CPU来说,IO的速度太慢了,CPU有大量的时间处于等待I...

海量小文件存储与Ceph实践

  海量小文件存储(简称LOSF,lots of small files)出现后,就一直是业界的难题,众多博文(如[1])对此问题进行了阐述与分析,许多互联网公司也针对自己的具体场景研发了自己的存储方案(如taobao开源的TFS,facebook自主研发的Haystack),还有一些公司在现有开源项目(如hbase,fastdfs,mfs等)基础上做针对...

Nginx超时配置

Nginx超时配置1.client_header_timeout语法client_header_timeout time 默认值60s 上下文http server 说明指定等待client发送一个请求头的超时时间(例如:GET/HTTP/1.1).仅当在一次read中,没有收到请求头,才会算超时。如果在超时时间内,client没发送任何东西,nginx返...

【基于python实现UI自动化】3.0 selenium

此文转载自:https://blog.csdn.net/lht3347/article/details/108630023#commentBox python-UI自动化之selenium元素定位 1.0 selenium工具介绍 2.0 selenium环境搭建 3.0 selenium元素定位 selenium常见8大元素定位 通过ID定位...