python中文件操作详解(1)

news2025/1/20 10:57:05

在python中我们经常会对文件进行一些常见的操作,比如打开文件,操作文件,关闭文件,此篇文章主要是记录自己在学习过程中的一些总结供大家学习,也欢迎查漏补缺~

1.文件的打开

   方式一:此种方式打开的文件需要手动将文件进行关闭

f1 = open(r'xxx', mode='r', encoding='utf-8')  
content = f1.read()  
print(content)  
f1.close()  

      f = open('文件路径', '编码方式', '操作方式')

     文件路径:可以是相对路径,也可以是绝对路径

路径的三种写法:

\\
file = open(‘C:\Users\chy\Desktop\Python\xxx.txt’)

r'\'
file = open(r’C:\Users\chy\Desktop\Python\xxx.txt’)

'/'(推荐)
file = open(‘C:/Users/chris/chy/Python/xxx.txt’)

     编码方式:可以不填写,默认是当前操作系统的编码,linux下默认是utf-8

     操作方式:只读(r),只写(w),写读,读写,追加等;如果是不写的话默认是只读模式r

   方法二:使用with语句进行打开文件(推荐使用此种方法)

with open(r'xxxx.txt', mode='r', encoding='utf-8') as f1:  
    content = f1.read()  
    print(content) 

优点1:不用手动关闭文件

with open('xxxxx', encoding='utf-8') as f1:  
    print(f1.read())

优点2:一个with语句可以操作多个文件

with open('xxx1', encoding='utf-8') as f1, \  
        open('xxxx2', encoding='utf-8', mode='w') as f2:  
    print(f1.read())  
    f2.write('ccccc')
2.文件的操作 

    (1)文件的读r,rb,r+,r+b

              r:只读模式,文件必须存在,不存在就会有异常

         rb:对于非文本文件,我们只能使用b模式。注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码  

f=open('c:\图片.jpg',mode='rb')
print(f.read())
f.close
输出结果是:b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x0…….

         r+:读写,先读写然后追加,一定要先读后写,否则会出现读取不到内容

#错误用法
f = open('log1.txt',encoding='utf-8',mode='r+')
f.write('345')  #先写,会将原来的内容给覆盖,然后文件指针放在文件最后
content = f.read()  #因为现在指针在文件最后导致读取的时候从最后一个位置进行读写就不会读出任何内容
print(content)  #输出的是空
f.close() 
#改进
f = open('log1.txt',encoding='utf-8',mode='r+')
f.write('345')  #先写,会将原来的内容给覆盖,然后文件指针放在文件最后
f.seek(0)  #会将文件指针给恢复到文件最开始
content = f.read()  #因为内容被覆盖了此时,读取到的内容是覆盖后的
print(content)  #输出的是345
f.close()

         r+b:文件以字节形式进行先读后以字节形式写,没有encoding。

path='c:\python\文件.txt'
f=open(path,mode='r+b')
print(f.read())
f.write(b'\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8')

    (2) 文件的写:w,wb,w+,w+b

               w:没有文件,创建文件;有文件,文件先清空,后写入

#写法1
f=open('xxx.txt',mode='w',encoding='utf-8')       #在相对路径下先创建这个文件
f.write('测试w模式的用法')
f.close
#写法二:
with open('xxx.txt',mode='w',encoding='utf-8') as f1:
    content=f1.write('测试w模式的用法')
    print(content)
    


          wb:以bytes写入,写入的内容,必须要转换为bytes类型才可以

#写入的内容直接是byte模式
with open('xxx','wb') as f1:
     f1.write(b'\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8')
     f1.seek(0)   #因为写入之后,光标会在最后一个指针所以需要将指针进行回退到文件的最开始
     content=f1.read()
     print(content)
#写入的不是byte内容,所以需要先转换成byte模式
with open('xxx','wb') as f1:
     f1.write('人生苦短,我想学Python'.encode(encoding="utf-8"))#str.encode()这个是函数转换
     content=f1.read()
     print(content)
     

      w+:写读,先写后读,但是此时光标已经移至最后,读出的内容可能只有一个换行符。但是可以通过改变光标位置进行读操作

with open('xxxx',mode='w+',encoding='utf-8') as f1:
    f1.write('ccc')
    print(f1.tell())     #tell()这个函数是输出指针当前的位置
    f1.seek(0)    #seek()这个函数是调整光标的位置,0代表将光标位置调整到句首
    content=f1.read()
    print(content)
 

    (3)文件的追加:a,ab,a+,a+b

               a:没有文件,创建文件追加,有文件,在文件后面追加,不支持读

with open('xxx',mode='a',encoding='utf-8') as f1:
   f1.seek(0)  #不管光标在哪里,都是在最后追加
   f1.write('adb')
3.文件的读取方式

    (1)全部读取出来 f.read()。全部读取,对于较大的文件,内存会负担不起      

with open('xxx.txt',encoding='utf-8') as f1:
    content = f1.read()
    print(content)

     (2) 读取一部分f.read(n)。在r模式下,read(n) 按照字符去读取。rb模式下按照字符的bytes模式读取

with  open('xxx.txt',encoding='utf-8') as f1:
    content=f1.read(3)     #代表从当前指针往后读取3个字符
    printcontent)

    (3) 一行一行的读 f.readline()按行读取,但是中间会有个换行符,这是因为每行文件末尾默认都有一个换行符

with open('xxxx',encoding='utf-8') as f1:
     f1.readline()    #读取完成以后此时指针会在第一行的末尾有个换行符
     f1.readlind()    #读取第二行,第一行跟第二行之间有个换行符

    (4) f.readlines() 按行读取,返回一个列表,列表中的每个元素就是每一行的字符串

with open('xxxx',encoding='utf-8') as f1:
    print(f1.readlins())

#返回的结果['11111111111111\n', '222222222222\n', '33333333333\n', '444444444abc']

    (5) for循环读取,在for循环中,每次读取一行,结束之后,内存就释放了。所以在整个for循环个过程中,始终只占用了一行内容的内存。推荐使用

with open('python1.txt',encoding='utf-8') as f1:
    for line in f1:
        print(line.strip())

  

4.文件的常用操作方法

  (1)f.seek():改变当前文件指针的位置,注意,移动的单位是byte(字节),所以如果是UTF-8的中文部分要3的倍数,意思就是一个字要三个字节

f.seek(offset,from_what)
  • from_what的值,从哪个位置进行偏移,如果是0表示开头,如果是1表示当前位置,2表示文件的结尾默认为0,即文件开头
  • seek(x,0):从文件首行首字符开始移动x个字符
  • seek(x,1):从当前为往后移动x个字符
  • seek(-x,2):从文件的结尾往前移动x个字符

(2)f.tell():使用tell()可以帮我们获取到当前光标在什么位置

with open("E:\PyCharm\\test.txt",mode ="r+",encoding = "utf-8") as f1:
    f1.seek(0)                   # 光标移动到开头
    f1.write("中国人")              # 写入信息,此时光标在9,因为中文3个字节代表一个字符3*3=9

    print(f1.tell())             # 此时获取光标所在的位置,中文一个字三个光标为一个字,因为中文3个字节代表一个字符
 
    f1.flush()                   # 刷新

     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1790068.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL实验 连接查询和嵌套查询

一、实验目的 1.掌握Management Studio的使用。 2.掌握SQL中连接查询和嵌套查询的使用。 二、实验内容及要求(请同学们尝试每道题使用连接和嵌套两种方式来进行查询,如果可以的话) 1.找出所有任教“数据…

云计算如何助力金融科技企业实现高效运营

一、引言 随着信息技术的飞速发展,云计算作为一种新兴的计算模式,正在逐渐改变着传统金融行业的运营模式。金融科技企业作为金融行业的重要组成部分,面临着日益增长的业务需求和技术挑战。在这一背景下,云计算凭借其弹性扩展、高可用性、低成本等优势,成为金融科技企业实…

7、架构-架构的安全性

即使只限定在“软件架构设计”这个语境下,系统安全仍然是一 个很大的话题。我们谈论的计算机系统安全,不仅仅是指“防御系统 被黑客攻击”这样狭隘的安全,还至少应包括(不限于)以下这些问 题的具体解决方案。 认证&am…

【Linux多线程】LWP和pthread_t

文章目录 LWPclone系统调用查看线程LWP理解LWP与TID pthread_id LWP LWP是Linux中线程的具体实现形式,在linux中,进程和线程本质上都是相同的,都是通过task_struct结构体来表示的。LWP是内核级线程,TID是其唯一标识符&#xff0c…

深度网络学习笔记(一)——self-attention机制介绍和计算步骤

self-attention机制介绍及其计算步骤 前言一、介绍和意义二、 计算细节2.1 计算Attention Score2.2 计算value2.3 计算关联结果b2.4 统一计算 三、总结 前言 Transformer是一种非常常见且强大的深度学习网络架构,尤其擅长处理输出为可变长度向量序列的任务&#xf…

杂项——STM32ZET6要注意的一些问题——高级定时器问题和PB3,PB4引脚问题

ZET6可能会用到定时器,高级定时器要输出PWM要加上这样一行代码,否则无法正常输出PWM波 TIM_CtrlPWMOutputs(TIM8, ENABLE); // 主输出使能,当使用的是通用定时器时,这句不需要 ZET6中PB3,PB4引脚默认功能是JTDO和NJTRST,如果想将…

python基础篇(2):字符串扩展知识点

1 字符串的三种定义方式 字符串在Python中有多种定义形式: (1)单引号定义法 name 博主帅绝上下五千年 print(name) print(type(name)) 效果如下: (2)双引号定义法 name "博主帅绝上下五千年&qu…

代课老师可以评职称吗?

代课老师可以评职称吗?这个问题颇具争议。代课老师由于其工作性质的特殊性,往往处于职称评审的边缘地带 代课老师,承担着临时或短期的教学任务,填补因各种原因造成的教师空缺。他们的工作性质决定了他们与正式教师在职责和角色上存…

【uni-app】开发问题汇总

文章目录 1、APP获取dom2、添加页面,参考其他页面,国际化就是对应页面的导航的国际化"navigationBarTitleText": "%m.i.ForgetPaymentPassword.bartitle%",3、setStatusBarStyle这个导航栏设置方法不要了,导航栏现在都用…

66、API攻防——接口安全阿里云KEYPostmanDVWS

文章目录 一、工具使用——Postman自动化测试二、安全问题——Dvws泄露&鉴权&XXE三、安全问题——阿里KEY信息泄露利用 dvws-node 一、工具使用——Postman自动化测试 二、安全问题——Dvws泄露&鉴权&XXE 路径中出现/api/,一般都是接口。 请求包是…

Cesium项目报错An error occurred while rendering. Rendering has stopped.

一般就是本地打开会报错,改成用本地服务器打开 全局安装一个live-server sudo cnpm i live-server -g然后新增一个package.json文件 npm init -y然后在package.json的scripts中增加一个命令 "server": "live-server ./ --port8181 --hostlocalhos…

香橙派 AIpro 的系统评测

0. 前言 你好,我是悦创。 今天受邀测评 Orange Pi AIpro开发板,我将准备用这个测试简单的代码来看看这块开发版的性能体验。 分别从:Sysbench、Stress-ng、PyPerformance、RPi.GPIO Benchmark、Geekbench 等方面来测试和分析结果。 下面就…

第15章 面向服务架构设计理论实践

服务是一个由服务提供者提供的,用于满足使用者请求的业务单元。服务的提供者和使用者都是软件代理为了各自的利益而产生的角色。 在面向服务的体系结构(Service-Oriented Architecture,SOA)中,服务的概念有了延伸,泛指系统对外提供的功能集。…

纷享销客BI智能分析平台技术架构介绍

纷享销客BI智能分析平台致力于降低用户上手门槛,无缝继承纷享销客PaaS平台的对象关系模型和权限体系,让使用纷享CRM的营销人员、销售人员、服务人员等各类角色人员都能够将分析场景与业务场景相融合,将数据思维融合到自己的日常工作、团队工作…

【笔记】半车垂向振动模型

模型如下 半车振动模型,被动悬架 力学推导 代码 %书第135页 clc clear close all %% 1.车辆参数 ms=690; Isy=1222; mwf=40.5; mwr=45.4; Ksf=17000; Ksr=22000; Csf=1500; Csr= 1500; Kwf= 192000; Kwr= 192000; a= 1.25; b= 1.51; L=a+b; %% 2.状态方程 A=[0 0 0…

今日科普:了解、预防、控制高血压

高血压,常被称为“隐形的健康威胁”,许多患者可能在毫无预警的情况下发病,且患病率逐年攀升,同时患者群体逐渐年轻化,高血压虽然难以根治,但并不可怕,真正可怕的是血压长期居高不下,…

【一百零一】【算法分析与设计】差分,1109. 航班预订统计,P4231 三步必杀,P5026 Lycanthropy

1109. 航班预订统计 这里有 n 个航班,它们分别从 1 到 n 进行编号。 有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] [first(i), last(i), seats(i)] 意味着在从 first(i) 到 last(i) (包含 first(i) 和 last(i) )…

【ArcGISPro SDK】构建多面体要素

结果展示 每个面构建顺序 代码 using ArcGIS.Core.CIM; using ArcGIS.Core.Data; using ArcGIS.Core.Geometry; using ArcGIS.Desktop.Catalog; using ArcGIS.Desktop.Core; using ArcGIS.Desktop.Editing; using ArcGIS.Desktop.Extensions; using ArcGIS.Desktop.Framework;…

JVM学习-内存泄漏

内存泄漏的理解和分类 可达性分析算法来判断对象是否是不再使用的对象,本质都是判断一上对象是否还被引用,对于这种情况下,由于代码的实现不同就会出现很多内存泄漏问题(让JVM误以为此对象还在引用,无法回收,造成内存泄…

写一个盲盒模拟器

最近想写一个小程序,随便写一个玩吧,先想了下功能: 1.有很多盲盒,可以选择模拟开启 2.自定义盲盒,我们可以自定义制作盲盒自己玩 3.用户界面,记录盲盒历史,可以给坏越提意见 所用技术栈&…