python中文件操作相关基础知识

python中文件操作相关基础知识

文件的概念

1,文件的概念?
   文件就是操作系统暴露给用户操作硬盘的快捷方式 ,
   当我们双击一个文件进行打开时,其实就是把硬盘中的数据加载到了内存中,然后展示给我们
   ctrl+s 保存文件时,其实就是命令系统立刻把内存中的数据刷新到硬盘中。
  
2.python代码如何打开文件
  方式1:
      f = open('文件路径','读写模式','编码设置')
      f.close 
      # 当打开文件使用完毕后需要关闭,方式1系统不会帮助你关闭文件
      
  方式2: 
      with语法
      with open(r'文件绝对路径','读写模式','编码设置') as 变量名:
      # 文件路径前面加上r 养成良好习惯,避免文件路径中含有特殊字符
        with语法不需要关闭文件,当此语法进行完毕系统会自动关闭文件
        也可以一次性打开多个不同的文件
       with open(r'文件绝对路径','读写模式','编码设置') as a,open(r'文件绝对路径','读写模式','编码设置') as b:

文件读写模式

1,什么是读写模式
   当我们打开一个文件时,我们要告诉计算机用什么方式打开有3种方式(r只读模式 w写入模式 a追加模式)
  
2.只读模式 'r'
  with open(r'/Users/moongod/Desktop/测试.txt','r',encoding='utf8') as f:
  		f.read()
  读写模式下只能对文件 只能读只能看不能写
  # 此模式下,如果文件路径不存在 则程序直接报错
  # 如果文件使用read方法可以直接读取
  # 如果文件较大 也可以使用for循环进行一行行阅读
  
3.只写模式 'w'
 with open(r'/Users/moongod/Desktop/测试.txt','w',encoding='utf8') as f:
  		f.write('写入的内容或变量名等')
      f.write('写入的内容或变量名等\n')
 只写模式下,如果文件被写入内容,则默认会清除之前的所有内容,只保留当前刚刚写下的内容
 # 注意 如果写入的内容需要换行,需要手动输入\n 换行符处理。
 # 并且在数据比对的时候 记得改文件换行时 有\n存在
 # 如果路径不存在,则会自动创建该文件

4.追加模式 'a'
 with open(r'/Users/moongod/Desktop/测试.txt','a',encoding='utf8') as f:
  		f.write('写入的内容或变量名等')
      f.write('写入的内容或变量名等\n')
 追加模式下。写入的内容会默认添加到文件尾部。
 # 如果需要换行 记得在文件最前面加上换行符 \n
 # 如果路径不存在,则会自动创建该文件

5 pass用法
  with open(r'/Users/moongod/Desktop/测试.txt','a',encoding='utf8') as f:
  		pass
  # 用于补全语法,无任何实际含义,有时候我们不知道写什么时,可以先写一个pass 

image

文件操作类型

1.文本模式 t
目前我们学的都是针对纯文本的文件操作,r w a 模式
#只能用来操作纯本文文件
#读写时都是以字符为单位
#需要设置encoding参数

2.二进制模(bytes模式)
 不是默认的模式,需要手动指定 rb wb ab
 #可以操作任意类型文件
 #读写都是以bytes为单位的
 #不需要encoding参数,因为它已经是二进制了

文件的方法

1,read()
文件.read() 
#一次性读取文件内所有内容,读取完后光标停留在文件末尾。如果在文件较大时不建议的使用 会导致内存溢出
2.for循环
for line in 文件名:
#一行行读取文件内容,避免内存溢出 (建议使用)
3.readline()
文件.readline
#一次只读一行内容
4.readlines()
文件.readlines()
#	一次性读取文件内容 会按照行数组织成列表的一个个数据值
5.readable()
文件.readable()  结果为 布尔值
#判断文件是否具备读数据的能力
6.write()
文件.write()   #(这里可以填写任意数据)
7.writeable()
	判断文件是否具备写数据的能力
8.writelines()
	接收一个列表 一次性将列表中所有的数据值写入
9.flush()
	将内存中文件数据立刻刷到硬盘 等价于ctrl + s

image

文件内光标的移动

关键词
seek
文件.seek(00)  
# seek(offset, whence)
offset是位移量 以字节为单位
whence是模式   0  1  2
0是基于文件开头
文本和二进制模式都可以使用
1是基于当前位置
只有二进制模式可以使用
2是基于文件末尾
只有二进制模式可以使用
#可以控制文件光标的位置

文件内容修改

1.先了解电脑硬盘修改数据原理
当我们把一些文件或数据等保存到硬盘时,其实就是对硬盘进行了刻字,如果我们需要修改文件时,其实就是硬盘把之前刻的字抹除再次重新刻上了你修改过的整体数据
硬盘删除数据原理
当你在硬盘中删除文件或数据时,其实并没有删除,只是把文件和数据的状态从可用占有状态,改为了不可用不显示不占用的状态,当没有新的数据覆盖上时,其实之前删除的数据还是存在的。
当有新的数据覆盖上旧数据才算是被真正删除掉。

2.在python中修改文件内容
  覆盖法:
  with open ('测试.txt','r',encoding='utf8') as f:
    d = f.read()
  with open ('测试.txt','w',encoding='utf8') as f:
    f.write(d.replace('修改内容''新的内容'))
   #先打开文件,然后使用另一个变量获取文件所有内容,然后再次使用写的模式打开文件
  #然后在文件中重新写入数据,使用replace方法替换原来的数据
  
  换地方重新写:
import os

with open('a.txt', 'r', encoding='utf8') as read_f, 
        open('.a.txt.swap', 'w', encoding='utf-8') as write_f:#.swap 临时文件
    for line in read_f:
        write_f.write(line.replace('tony', 'kevinSB'))

os.remove('a.txt')  # 删除了源文件
os.rename('.a.txt.swap', 'a.txt')  # 把临时文件改为了源文件名称
#在用户看来 感觉如同修改了源文件一样,其实是创建了一个临时文件重新写的

文件操作小练习

1.制作一个建议复制器,输入复制文件路径,输入新的文件路径 进行复制

file_path = input('请输入需要拷贝的文件路径').strip()
new_path = input('请输入新的文件路径').strip()
with open(file_path,'rb') as f, open(new_path,'wb') as f1:
    # 只读模式打开源文件  写入模式打开新文件,新文件不存在则会自动创建
    for line in f:
        # 使用临时变量 line 遍历 源文件
        f1.write(line)
        # 写入新文件,写入内容是 遍历的每一行的源文件 line
    print('拷贝成功')

2.利用文件充当数据库编写用户登录、注册功能 #文件名称: userinfo.txt
# 用户可以连续注册
# 用户可以多账号切换登录(多用户)
# 文件内有多个用户信息

while 1:
    print('''
        1.注册账户
        2.登录账户
        ''')
    cmd = input('请输入您要进行的指令').strip()
    if cmd == '1':
      	with open('/Users/moongod/Desktop/userinfo.txt', 'a', encoding='utf8') as d: 
          	pass   # 此代码只是为了先创建一个文件
        username = input('请输入用户名')
        with open('/Users/moongod/Desktop/userinfo.txt', 'r', encoding='utf8') as f: 
          #读取文件
            for line in f:  #临时变量去代替文件中的每一行
                real_name, real_pas = line.split('|')  # 解压赋值法 单行文本切割 获得已存在的账户和密码
                if real_name == username:  # 判断注册的用户名是否和文本中真实用户名冲突
                    print('用户名已被注册')
                    break
            else:
                password = input('请输入密码')
                with open('/Users/moongod/Desktop/userinfo.txt', 'a', encoding='utf8') as f1:
                    f1.write(f'{username}|{password}\n') # 存数据是规律组合 方便以后取
                print(f'注册成功,账户名:{username}')

    elif cmd == '2':
        username = input('请输入用户名')
        password = input('请输入密码')
        with open('/Users/moongod/Desktop/userinfo.txt', 'r', encoding='utf8') as f:
            for line in f:  # 账号|密码
                real_name, real_pas = line.split('|')  # 获得真实的账号密码
                if username == real_name and password == real_pas.strip('\n'): #做对比,注意真实的密码后面有换行符 需要去掉
                    print('登录成功')
                    break
            else:
                print('账号或密码错误')
    else:
        print('请输入正确的编号')
posted @   Python-moon  阅读(197)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示