一、文件操作

1.什么是文件

文件是操作系统暴露给用户能够快捷方便操作硬盘的快捷方式(接口)

2.代码如何操作文件

关键字:open()

三步走:

1.利用关键字open打开文件

2.利用其他方法操作文件

3.关闭文件

文件路径:相对路径与绝对路径

路径中出现了字母与斜杠的组合产生了特殊含义如何取消>>在路径字符串前面加一个r

r'D:\project\try.txt'

res = open('try.txt', 'r', encoding='utf8')
print(res.read())
res.close() # 关闭文件释放资源 '''
open(文件路径,读写模式,字符编码)
文件路径与读写模式是必须的
字符编码是可选的(有些模式需要编码)
'''

# with上下文管理(能够自动帮你close())
with open(r'try.txt', 'r', encoding='utf8') as f: # f=open() f.close()
print(f.read()) '''代码操作文件,一般使用with语法'''

3.文件读写模式

r, 只读模式(只能看不能改)

# 路径不存在,直接报错
with open(r'a.txt', 'r', encoding='utf8') as f1:
f1.read()
# 路径存在
with open(r'try.txt', 'r', encoding='utf8') as f2:
print(f2.read()) # 读取文件所有内容

w, 只写模式(只能写不能看)

# 路径不存在,自动创建
with open(r'b.txt', 'w', encoding='utf8') as f1:
f1.write('新建一个文件') # 路径存在,1.先清空文件内容 2.在执行写入操作
with open(r'try.txt', 'w', encoding='utf8') as f2:
f2.write('insist insist')

a, 只追加模式(追加内容)

# 路径不存在, 创建一个新的文件,可以写入内容但不可以读
with open(r'money.txt', 'a', encoding='utf8') as f1:
# f1.read() # 报错
f1.write('insist study') # 路径存在, 在文件内容的尾部追加新的写入内容
with open(r'money.txt', 'a', encoding='utf8') as f2:
f2.write('graduation from Oldboy')

目前所说的r w a读写模式还只能操作文本文件

操作视频图片等其他文件得使用下方提到的二进制模式操作



二、文件操作方法

1.读系列

# 1. 读系列
with open(r'11.py', 'r', encoding='utf8') as f:
print(f.read()) # 一次性读取文件内所有内容
print(f.readline()) # 每次只读文件一行内容
print(f.readlines()) # 读取文件所有内容,组织成列表,每个元素是文件的每行内容
print(f.readable()) # 判断当前文件是否具备读的能力

2.写系列

with open(r'try.txt', 'w', encoding='utf8') as f:
f.write('insist every day') # 往文件内写入内容
f.writelines(['elijah\n', 'jason\n', 'egon\n']) # 将列表中的多个字符串元素全部写入
f.write(123) # 写入操作的时候只能写入字符串,写入数字会报错
print(f.writable()) # 判断该文件是否具备写的能力
f.flush() # 直接将内存中的数据刷到硬盘中,相当于ctrl + s

3.文件优化操作

# with open(r'11.py', 'r', encoding='utf8') as f:
# # print(f.read())
# for line in f: # 文件变量名f支持for循环 相当于一行行读取文件内容
# print(line)
'''以后涉及多行文件内容情况一般都是采用for循环读取'''
'''
1.一次性读完之后光标停留在文末尾 无法再次读取内容
2。该方法在读取大文件的时候 可能会导致内存溢出的情况
解决上述问题的策略就是逐行读取文件内容
'''

4.练习多用户注册&登录功能

import os

while True:
# 打印功能列表
print(
'''
1.退出
2.注册
3.登录
'''
) choice = input('请输入业务编号:')
if choice == '0':
break
elif choice == '1':
# 注册功能
print('用户注册...')
# 获取用户名和密码
username = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
# 把用户数据组合成字符串
user_data = f'{username}|{password}'
# 判断用户数据文件是否已经存在,如果存在,提醒用户
if os.path.exists(rf'D:\pythonProject1(1102)\db\{username}.txt'):
print(f'用户 【{username}】 已存在,请不要重复注册')
else:
# 在数据库中文件创建相应的用户文件,存入用户信息
with open(rf'D:\pythonProject1(1102)\db\{username}.txt', 'w', encoding='utf8') as f:
f.write(user_data)
print(f'用户 【{username}】 创建成功!')
elif choice == '2':
# 登录功能
print('用户登录...')
# 获取用户名和密码
username = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
# 判断用户数据文件路径是否存在
if os.path.exists(rf'D:\pythonProject1(1102)\db\{username}.txt'):
# 如果存在,读取文件数据并作解压赋值,取出用户名和密码
with open(rf'D:\pythonProject1(1102)\db\{username}.txt', 'r', encoding='utf8') as f:
res = f.read()
name, pwd = res.split('|')
if username == name and password == pwd:
print('登录成功')
else:
print('用户名或密码错误')
else:
print('用户不存在...')
else:
print('请输入正确的编号...')

三、文件操作模式

t >> 文本模式

1.默认的模式。。r w a >>> rt、 wt、 at

2.该模式所有操作都是以字符串为基本单位(文本)

3.该模式必须要指定encoding参数

4.该模式只能操作文本文件

b >> 二进制模式

1.该模式可以操作任意类型的文件

2.该模式所有操作都是以bytes类型(二进制)为基本单位

3.该模式不需要指定encoding参数

rb、wb、ab

文件拷贝练习

while True:
# 获取要拷贝的文件路径和目标粘贴位置路径
file_path = input('请输入要拷贝的文件路径(0为退出):')
if file_path == '0':
break
copy_path = input('请输入要粘贴的目的地位置:') # 以二进制模式打开并读取文件数据
with open(file_path, 'rb') as f:
res = f.read() # 以二进制模式写入新的文件路径
with open(copy_path, 'wb') as f1:
for line in res:
f1.write(res)
print('拷贝成功') # 方式2
# 1.待拷贝的文件路径
wait_copy_file = input('file path>>>:').strip()
# 2.新的文件路径
new_file_path = input('new path>>>:').strip()
# 3.以r模式打开步骤1的路径 以w模式打开步骤2的路径
with open(r'%s' % wait_copy_file, 'rb') as f1, \
open(r'%s' % new_file_path, 'wb') as f2:
for line in f1:
f2.write(line)

二进制的读写操作

# t   文本模式
#
# a.txt 文件内容
# insist
# 坚持吧坚持吧
# 顶住顶住 with open(r'a.txt', 'rb') as f:
print(f.read().decode('utf8'))
print(f.read(6).decode('utf8')) # insist with open(r'a.txt', 'r', encoding='utf8') as f1:
# print(f1.read())
print(f1.read(8)) # insist 坚 '''
read() 括号内可以放数字
在t模式下数字表示字符个数
在b模式下数字表示字节格式
英文字符统一使用一个bytes来表示
中文字符统一使用三个bytes来表示
'''

文件内光标的移动

# 文件内光标的移动
with open(r'a.txt', 'rb') as f:
print(f.read(6)) # b'insist'
print(f.tell()) # 查看光标移动了多少个字节 6
f.seek(8, 0)
print(f.tell()) # 8
print(f.read().decode('utf8')) '''
控制文件内光标的移动 f.seek()
f.seek(offset, whence)
offset表示位移量
始终是以字节为最小单位
正数从左到右移动
负数从左往右移动
whence表示模式
0: 以文件开头为参考系(支持tb两种模式)
1: 只支持b模式 以当前位置为参考系
2: 只支持b模式 以文件末尾为参考系
'''

文件的内容修改

# 文件内容修改
# 方式1 覆盖
with open(r'a.txt', 'r', encoding='utf8') as f:
data = f.read() with open(r'a.txt', 'w', encoding='utf8') as f1:
new_data = data.replace('insist', 'hard study')
f1.write(new_data) # 方式2 新建
import os with open('a.txt', 'r', encoding='utf8') as f, \
open('a.txt.swap', 'w', encoding='utf8') as f1: # 同时打开两个文件的方式
for line in f:
f1.write(line.replace('坚持', '努力')) # 替换掉原文件的字符
os.remove('a.txt')
os.rename('a.txt.swap', 'a.txt')

python文件操作方式的更多相关文章

  1. 第9.12节 Python中其他文件操作方式

    一. 引言 本章老猿主要介绍了Python 内置io模块的文件操作相关功能,其实除了内置io模块可以进行文件操作外,Python的不同模块还提供了多种文件操作方式,下面简单将这些模块和方法介绍一下. ...

  2. 四、Python文件操作

    描述:Python的文件操作涉及对文件的读/写与编码的处理. 1.两种写法 1.1 第一种 1 f = open('文件路径', '文件操作方式', encoding='utf-8') 2 对文件操作 ...

  3. 第9章 Python文件操作目录

    第9章 Python文件操作 第9.1节 Python的文件打开函数open简介 第9.2节 Python的文件打开函数open详解 第9.3节 Python的文件行读取:readline 第9.4节 ...

  4. Python文件操作函数os.open、io.open、内置函数open之间的关系

    Python提供了多种文件操作方式,这里简单介绍os.open.io.open.内置函数open之间的关系: 一.内置函数open和io.open实际上是同一个函数,后者是前者的别名: 二.os.op ...

  5. Linux下Python 文件内容替换脚本

    Linux下Python 文件替换脚本 import sys,os if len(sys.argv)<=4: old_text,new_text = sys.argv[1],sys.argv[2 ...

  6. 【Python文件处理】递归批处理文件夹子目录内所有txt数据

    因为有个需求,需要处理文件夹内所有txt文件,将txt里面的数据筛选,重新存储. 虽然手工可以做,但想到了python一直主张的是自动化测试,就想试着写一个自动化处理数据的程序. 一.分析数据格式 需 ...

  7. Python文件使用“wb”方式打开,写入内容

    Python文件使用"wb"方式打开,写入字符串会报错,因为这种打开方式为:以二进制格式打开一个文件只用于写入.如果该文件已存在则将其覆盖.如果该文件不存在,创建新文件. 所以写入 ...

  8. Python 文件操作函数

    这个博客是 Building powerful image classification models using very little data 的前期准备,用于把图片数据按照教程指示放到规定的文 ...

  9. python文件I/O(转)

    Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你 ...

随机推荐

  1. mybatis学习笔记(四)

    resultType 语句返回值类型的完整类名或别名 resultType 返回的是一个map集合,key是列名,value是对应的值 使用resultMap实现联表查询 resultMap 查询的结 ...

  2. [ vue ] quasar框架踩坑:在vue文件外导入路由,执行router.push('/')没有效果

    问题描述: 1. 如图所示的项目结构目录, axios.js 文件负责拦截全局请求和回复,我在拦截回复的代码中写了:如果服务器回复了一个401错误,则执行Router.push('/'),但是该方法失 ...

  3. xftp 6 的 使用

    1.前言 xftp是个向云服务器linux系统传输文件的软件,装载在window系统 简单易用 2.下载 官方下载地址:https://www.netsarang.com/zh/xftp-downlo ...

  4. 关于Vue中根组件与组件树的理解

    在观看了b站的关于Vue3的教学视频后,对Vue的根组件与组件树进行简单的总结下 一.实例化Vue应用 // 此时,app就是一个Vue应用的实例,或者说是一个对象 const app = Vue.c ...

  5. Android官方文档翻译 十二 3.Supporting Different Devices

    Supporting Different Devices 支持不同设备 Dependencies and prerequisites 依赖关系和先决条件 Android 1.6 or higher A ...

  6. RHCSA 第七天

    1.创建文件,并赋予权限611(两种方式,一种guoa,一种nnn) 2.创建目录,并赋予权限755(两种方式,一种guoa,一种nnn) 3.创建文件,并将文件的属主和属组修改其他用户 4.设置su ...

  7. leetcode 51. N皇后 及 52.N皇后 II

    51. N皇后 问题描述 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后 ...

  8. IExposedPropertyTable与ExposedReference的使用

    近期回顾Dead of the Book demo时,看见了它们的运用.感觉主要是用于ScriptableObject资源和Scene资源解耦: 并将这类做法规范化. 做一个小测试,IExposedP ...

  9. golang gin框架中实现大文件的流式上传

    一般来说,通过c.Request.FormFile()获取文件的时候,所有内容都全部读到了内存.如果是个巨大的文件,则可能内存会爆掉:且,有的时候我们需要一边上传一边处理. 以下的代码实现了大文件流式 ...

  10. 用Win +R运行快速启动各种程序

    许多人认为Windows的Win+R运行就是摆设,除了开cmd和shutdown外毫无用处.其实Win+R是可以用于各种快捷启动的. Win+R可以视作执行一条cmd命令,要用他运行程序,理论上必须输 ...