1、什么是文件

操作系统提供给你操作硬盘的一个工具

2、为什么要用文件
因为人类和计算机要永久保存数据

3、怎么用文件

相对路径:a.txt # 必须与当前py文件在同一级目录
绝对路径:D:\项目路径\python13期\day07\a.txt

读文件

f=open('a.txt')

print(f.readable()) #判断当前文件是否可读   True
print(f.writable()) #判断当前文件是否可写  False f.close() #回收操作系统的资源
#\可以实现换行   以下为相对路径     同时读和写操作
with open('a.txt',mode='r')as rf,\
open('a.txt',mode='w')as wf: # with会自动帮你回收操作系统的资源,无需自己操作,关闭
print(rf.readable()) #True
print(rf.writable()) #False #r进行转义 以下为绝对路径
with open(r'D:\oldboy_edu\python_code\day7\a.txt',encoding='utf-8')as f: # 不加encoding = 'utf-8'出现乱码,原因不明
print(f.read()) #读取文件

th.jpg(原素材)lixiaoran.png(生成图片)

# 默认打开文件的模式:rt  read text   和r相同
# rb read bytes
with open('a.txt',mode='rb')as f: # 内容为:今天天气真好
print(f.read())
# b'\xe4\xbb\x8a\xe5\xa4\xa9\xe5\xa4\xa9\xe6\xb0\x94\xe7\x9c\x9f\xe5\xa5\xbd' #读取jpg图片为二进制,再把二进制数据写入png文件,生成新的图片
with open(r'th.jpg',mode='rb')as rf,\
open('lixiaoran.png',mode='wb')as wf:
lixiaoran = rf.read()
print(lixiaoran)
wf.write(lixiaoran)

打开文件的三种模式:
r :  1、只读  2、如果文件不存在,会报错
w:(慎用)  1、只写  2、如果文件不存在,则新建一个文件写入数据  3、如果文件内存在数据,会将数据清空,重新写入
a:  1、追加写  2、如果文件内存在数据,会在已有数据的后面追加数据  3、如果文件不存在,则新建一个文件写入数据
处理文件的模式:

  t:文本模式
    只能与r\w\a连用
    默认情况下,是rt模式

  b:bytes模式
    只能与r\w\a连用
    处理二进制数据

"""

文件处理的内置方法:
  读:
  f.read() # 读文件;一次性读出所有数据
  f.readline() # 一次读一行
  f.readlines() # 将数据全部读入内存,以换行符分隔,存入列表
  f.readable() # 是否可读
  写:
  f.write # 写文件
  f.writeable # 是否可写
  f.writelines() # for + f.write()

  for line in f:
    pass
r:防止转义

with open(r'dir\b.txt','r',encoding='gbk')as f:
print(f.readable())
print(f.read()) # 读文件;一次性读出所有数据
print(f.readline()) # 执行一次,打印一行内容
print(f.readlines()) #将数据全部读入内存,以换行符分隔,存入列表
print(f.readable())
for i in f:  # f为句柄,可迭代对象,会以\n为结束,一行行打印
print(i) with open('b.txt', 'w', encoding='gbk')as f:
f.write("上海校区第一帅-sean")  # 写文件
f.writelines(["上午没翻车\n",'我很高兴']) # 将数据全部读入内存,以换行符分隔,存入列表
   # writelines 可以写入列表,可迭代对象。类似 for + f.write()           with open(r'dir\aaaaa.txt','a',encoding='gbk')as f:  #追加写入
print(f.writable())
f.write("\n翻车是不可能的")

注意:在windows系统下,用open函数打开txt文档标注编码,默认为gbk。(下面方法可以显示当前编码方式)

with open(r'b.txt','r',encoding='utf-8')as f:
print(f.encoding)  #显示当前编码格式

 

打开文件模式扩展

r,w,a     #纯净模式
r+,w+,a+  # 可读可写 (除了可读·可写之外剩下都是自己的特性)

注:写完必须关了文件,才能读,否则在内存,不再硬盘

with open('abc.txt','r+',encoding='utf8')as f:
f.write('天气正好')  #如果没有文件,则报错
print(f.readable())
print(f.writable())
with open('abc.txt','w+',encoding='utf8')as f:
f.write('天气不太好')  #没有文件则创建
print(f.read())
print(f.readable())
print(f.writable())
with open('a.txt','a+',encoding='utf8')as f:
f.write('哦哟,天气好')
# print(f.read())
print(f.readable())
print(f.writable())

文件内光标的移动:

"""
f.seek(offset,whence)
offset: 相对偏移度 (光标移动的位数)针对的是字节
whence:指定光标位置从何开始,默认是0
  0:从文件开头
  1:从当前位置
  2:从文件末尾

补充:
  utf-8:
  中文是3个bytes
  英文是1个bytes
  gbk:
  中文是2个bytes
  全角英文2bytes,半角英文是1个bytes

open函数不设置encoding,默认是gbk
与encode一毛钱都没有,encoding只是一个参数

如果rt打开文档,若whence为1,2,必须是(0,1),(0,2)!

rt模式下,除了read里面的参数是针对字符,其他都是针对字节

rb模式下,全部正对字节
"""

with open('a.txt','r',encoding='utf8')as f:     #文件内容为'哦哟天气好啦啦啦'
print(f.tell()) #
print(f.read(2)) #哦哟
print(f.tell()) #
f.seek(6,0) #光标从头开始,前进6个bytes,也就是2个中文字符
print(f.tell()) #
print(f.read(1)) #读取光标后第一个字符 '天' with open('a.txt','r')as f: #不写encoding默认gbk,因为open调用的是window操作系统,默认为gbk
f.seek(4,0)
print(f.read(2).encode('utf-8')) #把内存unicode转为utf-8,2个字符也就是6个直接
b'\xe6\x91\x95\xe6\xbe\xb6' with open('a.txt','rb')as f:
print(f.read(4).decode('utf-8')) #read 读取的是字节,文件为utf-8模式,以'utf8'格式解码
f.seek(6,1)
print(f.read(3).decode('utf-8'))
f.seek(-3,2)
print(f.tell())
print(f.read(3).decode('utf-8'))

获取文件实时动态脚本

以下为获取文件实时动态脚本,优先打开进行捕获动态

import time
with open('c.txt','r',encoding='utf8')as f:
f.seek(0,2) ## 以文件末尾为参照点,移动0位
while True:
time.sleep(1)
res=f.readline() #一次读一行
if res: # 如果你读出数据了,就执行下面的代码块
print(f'录入记录:{res}')

以下为生成文件动态程序

import time
res = time.strftime('%Y-%m-%d %H:%M:%S')
with open(r'a.txt','a',encoding='utf-8')as f:
for i in range(10):
f.write(f'{res}:马上要学函数了,有点难,怎么办\n')

运行生成文件动态后,获取文件实时动态脚本自动捕获输入命令

修改文件内容:

方法1:

with open('a.txt','r',encoding='utf8')as f:
data=f.read()
print(data)
print(type(data))
with open('a.txt','w',encoding='utf8')as f:
res=data.replace('家乐福','沃尔玛')
f.write(res)

方法2:

import os
with open('b.txt','r',encoding='utf8')as rf,\
open('b_wap.txt','w',encoding='utf8')as wf:
data=rf.read()
res=data.replace('小明','小红')
wf.write(res) os.remove('b.txt')
os.rename('b_wap.txt','b.txt')

方法3:

截段  truncate(6):

with open(……)as f:
f.truncate(6) #截段6个字节

f.flush()  # 将内存中数据刷到硬盘

with open(…'r'…)as rf,\
open(…'a'…)as wf:
wf.write('ab')
wf.flush() # 强制刷到硬盘
rf.read() # 不关闭可以直接读

python基础语法4 文件处理的更多相关文章

  1. Python基础语法之文件操作

    1 读文件 1.1 简单读文件 f = open('text', 'r') # f是文件句柄 data = f.read() # read方法可以加整型参数,是几就读几个字符 print(data) ...

  2. python基础语法、数据结构、字符编码、文件处理 练习题

    考试范围 '''1.python入门:编程语言相关概念2.python基础语法:变量.运算符.流程控制3.数据结构:数字.字符串.列表.元组.字典.集合4.字符编码5.文件处理''' 考试内容 1.简 ...

  3. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

  4. Python 基础语法(三)

    Python 基础语法(三) --------------------------------------------接 Python 基础语法(二)------------------------- ...

  5. Python 基础语法(四)

    Python 基础语法(四) --------------------------------------------接 Python 基础语法(三)------------------------- ...

  6. Python 基础语法

    Python 基础语法 Python语言与Perl,C和Java等语言有许多相似之处.但是,也存在一些差异. 第一个Python程序 E:\Python>python Python 3.3.5 ...

  7. python学习第五讲,python基础语法之函数语法,与Import导入模块.

    目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...

  8. python基础语法及知识点总结

    本文转载于星过无痕的博客http://www.cnblogs.com/linxiangpeng/p/6403991.html 在此表达对原创作者的感激之情,多谢星过无痕的分享!谢谢! Python学习 ...

  9. 【转】Python基础语法

    [转]Python基础语法 学习一门编程语言,通常是学习该语言的以下几个部分的内容: 基础语法:如,变量的声明与调用.基本输出语句.代码块语法.注释等: 数据类型:通常都为 数字.字符串.布尔值.数组 ...

随机推荐

  1. Python3.7 - Argparse模块的用法

    argparse 是一个命令行参数解析模块. argparse 是python自带的命令行参数解析包,可以用来方便地读取命令行参数,当你的代码需要频繁地修改参数的时候,使用这个工具可以将参数和代码分离 ...

  2. Maven 教程(20)— 使用maven-assembly-plugin插件来定制化打包

    原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79777976 简单的说,maven-assembly-plugin 就是用来帮助 ...

  3. nginx开启gzip的方法

    nginx开启gzip的方法 1.vi打开Nginx配置文件 <pre>vi /usr/local/nginx/conf/nginx.conf</pre> 2.找到如下一段,进 ...

  4. CI框架从哪里看起?CI框架怎么开始学习,CI的初始设置

    很多朋友不知道CI框架从哪里开始学起,想学一个新的框架其实并不难.只要你认真研究,自习摸索都很简单! 概述和基本配置参数 配置CI: application/config/config.php:14配 ...

  5. MD5加盐与安全

    PHP开发者对md5()这个函数是熟悉不过了,很多开发者都使用md5('abc123')对用户密码进行加密处理,这样做没有错,但是安全性还是很低的,因为很多网站的用户数据都是用md5进行加密处理的,所 ...

  6. FusionInsight大数据开发学习总结(1)

    FusionInsight大数据开发 FusionInsight HD是一个大数据全栈商用平台,支持各种通用大数据应用场景. 技能需求 扎实的编程基础 Java/Scala/python/SQL/sh ...

  7. golang学习笔记 ---interface

    1. 什么是interface接口 interface 是GO语言的基础特性之一.可以理解为一种类型的规范或者约定.它跟java,C# 不太一样,不需要显示说明实现了某个接口,它没有继承或子类或“im ...

  8. C# 调用Access数据库关于like模糊查询的写法

    在access查询视图中要使用"*"做模糊匹配,但是在程序中要用%来匹配.在access中:NEIBUBH like '*1234*'在程序中:NEIBUBH like '%123 ...

  9. k8s+jenkins(DevOps全流程)

    k8s集群搭建是参照别人的,链接找不到了.需要5台机器,3主2从,主最少搭建3台才能实现高可用. 流程jenkins打包代码 >> 把打包代码生成镜像 >> 备份镜像库旧镜像 ...

  10. Celery在Django中的使用介绍

    Celery在Django中的使用介绍 Celery简介 celery是一个简单.灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必须工具. 它是一个专注于实时处理的任务队列,同时也 ...