首页 > 其他分享 >py07-文件处理

py07-文件处理

时间:2023-02-03 09:22:16浏览次数:49  
标签:文件 utf 处理 seek read py07 print open

"""
什么是文件?
操作系统提供给用户操作复杂硬件(硬盘)的简易的接口

为什么操作文件
人或者应用程序需要永久的保存数据

如何用
f = open()
f.read()
f.close()
"""
# 通过python代码操作文件
# r取消转义
# f = open(r'D:\Python项目\day07\a.txt',encoding='utf-8') # 向操作系统发送请求 打开某个文件
# # 应用程序要想操作计算机硬件 必须通过操作系统来简介的操作
# print(f) # f是文件对象
# print(f.read()) # windows操作系统默认的编码是gbk
# f.read() # 向操作系统发请求 读取文件内容
# f.close() # 告诉操作系统 关闭打开的文件
# print(f)
# print(f.read())

# 文件上下文操作
with open(r'D:\Python项目\day07\a.txt',encoding='utf-8') as f ,\
open(r'D:\Python项目\day07\b.txt',encoding='utf-8') as f1: # f仅仅是一个变量名 你把它看成是一个遥控器
print(f)
print(f.read())
print(f1)
print(f1.read())

"""
文件打开的模式
r 只读模式
w 只写模式
a 追加写模式
操作文件单位的方式
t 文本文件 t在使用的时候需要指定encoding参数 如果不知道默认是操作系统的默认编码
b 二进制 一定不能指定encoding参数
"""
# mode参数 可以不写 不写的话默认是rt 只读的文本文件 这个t不写默认就是t
# with open(r'D:\Python项目\day07\a.txt',mode='r',encoding='utf-8') as f:
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# print(f.read()) # 一次性将文件内容全部读出

# with open(r'D:\Python项目\day07\1.jpeg',mode='rb') as f:
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# print(f.read()) # 一次性将文件内容全部读出


# r模式在打开文件的时候 如果文件不存在 直接报错
# 文件路径可以写相对路径 但是需要注意该文件必须与执行文件在同一层文件下
# with open(r'a.txt',mode='r',encoding='utf-8') as f:
# with open(r'a.txt','r',encoding='utf-8') as f1: mode关键字可以不写
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# print(">>>1:")
# print(f.read()) # 一次性将文件内容全部读出
# print('>>>2:')
# print(f.read()) # 读完一次之后 文件的光标已经在文件末尾了,再读就没有内容了可读
# print(f.readlines()) # 返回的是一个列表 列表中的一个个元素对应的就是文件的一行行内容
# for line in f: # f可以被for循环 每for循环依次 读一行内容
# print(i) # 这个方法 就可以解决大文件一次性读取占用内存过高的问题
# print(f.readline()) # 只读取文件一行内容
# print(f.readline())
# print(f.readline())
# print(f.readline())


# w模式:w模式一定要慎用
# 1.文件不存在的情况下 自动创建该文件
# 2.当文件存在的情况下 会先清空文件内容再写入
# with open(r'xxx.txt',mode='w',encoding='utf-8') as f:
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# f.write('不不不,你没有翻~\n')
# f.write('不不不,你没有翻~\n')
# f.write('不不不,你没有翻~\n')
# f.write('不不不,你没有翻~\r')
# f.write('不不不,你没有翻~')
# l = ['不sdffs,sdfs有翻~\n','不sdfsdf不,你sdfsf翻~\n','不sfad不,你没sa翻~\n']
# f.writelines(l)
# # 上下等价
# for i in l:
# f.write(i)


# a模式
# 1.当文件不存在的情况下 自动创建该文件
# 2.当文件存在的情况下,不清空文件内容, 文件的光标会移动文件的最后
# with open(r'yyy.txt',mode='a',encoding='utf-8') as f:
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# f.write('我是小尾巴\n')

 

"""
r
w
a
将上面的三个模式称为纯净模式
r+
w+
a+
"""
# with open(r'test',mode='r+',encoding='utf-8') as f:
# print(f.readable())
# print(f.writable())
# print(f.readline())
# f.write('嘿嘿嘿')

 

# with open(r'test',mode='w+',encoding='utf-8') as f:
# print(f.readable())
# print(f.writable())
# print(f.readline())
# f.write('嘿嘿嘿')


# with open(r'test',mode='r+b') as f:
# print(f.readable())
# print(f.writable())
# res = f.read()
# # print(res.decode('utf-8'))
# res1 = str(res,encoding='utf-8')
# print(res1)

 

# 在rt模式下 read内的数字 表示的是字符的个数
# 初次之外,数字表示的都是字节
# with open(r'test','r',encoding='utf-8') as f:
# print(f.read(5))

# with open(r'test','rb') as f:
# res = f.read(10) # 读的是三个字节bytes
# print(res)
# print(res.decode('utf-8'))


# 文件内光标的移动
"""
f.seek(offset,whence)
offset:相对偏移量 光标移动的位数
whence:
0:参照文件的开头 t和b都可以使用
1:参照光标所在的当前位置 只能在b模式下用
2:参照文件的末尾 只能在b模式下使用
"""
# with open(r'test','rt',encoding='utf-8') as f:
# print(f.read(1))
# # f.seek(6,0) # seek移动都是字节数
# # f.seek(4,0) # seek移动都是字节数
# # print(f.read(1))
# f.seek(0,0)
# print(f.read(1))
# f.seek(0, 0)
# print(f.read(1))
# f.seek(6,0)
# print(f.read())

 

# with open(r'test','rb') as f:
# print(f.read(3).decode('utf-8'))
# f.seek(0,0)
# print(f.read(3).decode('utf-8'))
# f.seek(7,0)
# print(f.read(1).decode('utf-8'))
# # f.seek(6,0) # seek移动都是字节数
# # f.seek(4,0) # seek移动都是字节数

# with open(r'test','rb') as f:
# print(f.read(3).decode('utf-8'))
# f.seek(3,1)
# print(f.read(1))
# f.seek(6,0) # seek移动都是字节数
# f.seek(4,0) # seek移动都是字节数


# with open(r'test','rb') as f:
# print(f.read())
# f.seek(-4,2)
# print(f.read().decode('utf-8'))

# with open(r'test','r+',encoding='utf-8') as f:
# f.seek(3,0)
# f.write('过')

#修改文件

# with open(r'test','r+',encoding='utf-8') as f:
# f.seek(6,0)
# f.write('h')

 

# 修改文件
# 先将数据由硬盘读到内存(读文件)
# 在内存中完成修改(字符串的替换)
# 再覆盖原来的内容(写文件)
# with open(r'test02.txt','r',encoding='utf-8') as f:
# data = f.read()
# print(data)
# print(type(data))
#
# with open(r'test02.txt','w',encoding='utf-8') as f:
# res = data.replace('egon','jason')
# print(data)
# f.write(res)

"""
优点:任意时间硬盘上只有一个文件 不会占用过多硬盘空间
缺点:当文件过大的情况下,可能会造成内存溢出
"""


# 文件修改方式2
# 创建一个新文件
# 循环读取老文件内容到内存进行修改 将修改好的内容写到新文件中
# 将老文件删除 将新文件的名字改成老文件名
import os


with open(r'test02.txt','r',encoding='utf-8') as read_f,\
open(r'test02.swap','a',encoding='utf-8') as write_f:
for line in read_f:
new_line = line.replace('jason','egon')
write_f.write(new_line)
os.remove('test02.txt')
os.rename('test02.swap','test02.txt')


"""
优点:内存中始终只有一行内容 不占内存
缺点:再某一时刻硬盘上会同时存在两个文件

 

标签:文件,utf,处理,seek,read,py07,print,open
From: https://www.cnblogs.com/chendaodeng/p/17088027.html

相关文章

  • 一对多的处理
             ......
  • 多对一的处理
     第一种是根据Student表里的tid去teacher再去查一次,将查询结果映射为resulttypeStudent类的第三个属性Teacher,以为是引用类型,所以要指明javatype   第二种是将需......
  • Jmeter 处理MD5加密
    引入MD5加密所需要的jar包。该jar包的名字是:commons-codec-1.9.jarhttps://mvnrepository.com/artifact/commons-codec/commons-codec/1.9 线程组下添加一个前置......
  • numpy 读写文件
     读写bin文件   ndarray.tofile(fid,sep="",format="%s")       将数组作为txt或bin(默认)写入文件,不保存数组形状和元素类型       fid:文件......
  • 使用IO流复制文件
    对文件的复制也是我们工作当中经常会遇到的操作,那么哪种方式效率更快呢,今天来做个测试。头脑风暴首先能想到的就是,采用两个数据流:一个用于读取、一个用于写入;IO流我们可以采......
  • Luogu5435 基于值域预处理的快速 GCD & Leetcode2543 - binary GCD -
    题目链接:https://www.luogu.com.cn/problem/P5435请忽略题目名称学到一个科技:binaryGCD,能够快速求出两个数GCD(从这道题来看已经接近\(O(1)\)了)代码://bySkyRainW......
  • 机器学习-数据处理-降维
    降维的定义降维是将高维数据变成低维表示,同时数据中蕴含的信息尽量保持不变。(高维—>低维)降维是一种非监督学习任务。因为降维过程中不用样本的标签。(非监督) 降维的......
  • Qt Creator9.0生成工程后没有.pro文件
    QtCreator9.0默认建立的widget项目只有CMakeLists.txt文件,没有pro文件发现生成工程文件时默认选择的是cmake,不是qmake导致的这个问题,将Builldsystem中转化成qmake之后......
  • sourceTree拉取远程代码之后报错,说此文件已经删除怎么解决
    问题描述:在当B拉取远程分支之后,sourcetree会报错,出现红色(好像也是灰色的)文件,说这两个已经删除。[又或者是xcode报错文件不存在被删除了]。问题产生过程:作者A在xcode左边工程目......
  • VS 禁止自动创建平台子文件夹“net48”
    问题:最近在创建vb.net或者c#项目的时候,总是会在设定的输出路径下自动创建一个“net48”的平台文件夹,并将dll生成在这个文件夹里面,而调试启动的exe在设定的输出路径下,导致调......