python文件处理

概念及作用(为什么用文件操作)计算机系统分为:计算机硬件,操作系统,应用程序三部分。我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作

大家好,又见面了,我是你们的朋友全栈君。

概念及作用(为什么用文件操作)

计算机系统分为:计算机硬件,操作系统,应用程序三部分。

我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。

有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程:

概念:

文件处理:对所需要的信息进行查找  替换  删除等批量操作

作用:

为了把需要的信息永久性的保存在文件中需要的时候直接把可以拿到结果

文件的操作

文件操作流程

1.打开文件,得到文件句柄并赋值给一个变量

2.通过句柄对文件进行操作

3.关闭文件:若要保证不乱码,文件以什么方式存的,就要以什么方式打开。

<span role="heading" aria-level="2">python文件处理
<span role="heading" aria-level="2">python文件处理

文件操作
打开文件格式:f=open(‘文件路径’,encoding=’utf-8’)
其中f叫文件句柄也叫文件操作符 就是一个变量名  可以随便起名字  必须遵循变量的命名规范  但是一般情况下文件句柄的命名必须具有标识性的意义  比如f或者file_open等
读取文件内容:
Connect=f.read()   read()方法读取整个文件的内容  返回一个字符串
F.seek(0)    seek()方法指定光标的停止位置值为0表示光标始终在文件的起始位置
Connect=f.readlines()   readlines()方法也是读取整个文件  但是返回一个列表类型的值(把整个文件的内容以列表的形式打印出来)
Connect=f.readline()  readline()方法读取整个文件的一行内容
connect是读取文件的结果也是一个变量名一般情况下也必须起一个有标识性的名字,就用connect
关闭文件:
F.close()


文件的写操作:
注意  如果用w或者w+的方式打开文件  会立刻把文件中的内容全部清空并且不能回复  所有在打开文件的时候千万不要用w或者w+的方式
f=open(‘文件路径’,w,encoding=’utf-8’)    打开文件把内容全清空且不会回复
如果文件里存在内容,文件的写操作会把文件的内容全部清空 并且不会回复   工作中需要慎用 
F.write(‘哪吒|180|male’)        将字符串写入文件
F.writelines()    将列表中的内容写入文件
F.close()

注意:不要对同一个文件同时进行读和写的操作
f=open(‘file’,r+,encoding=’utf-8’)   
F.readline() 
F.write(‘哪吒|180|male’)        将字符串写入文件
F.close()
当以读的方式打开文件的时候  不清空文件
当用户进行读取操作之后  写的所有内容都变成追写
当用户不执行读操作  写默认从开始的位置覆盖

修改文件:
注意 千万不要修改当前的文件
示例文件:
Wusir|66|male
Alex|83|female
Egon|50|male

Import  os  引入os模块(用来和操作系统进行交互)
f=open(‘file’,r,encoding=’utf-8’)
F2=open(‘file_back’,w,encoding=’utf-8’)
For line in f:
User_liest=Line.splite(‘|’)
User_list[0]=user_list[0]+’_somebody’
User_str=’|’.join(user_list)
Print(user_str)
F2.wtrite(user_str)
F.close()
F2.close()
Os.remove(‘file’)      #删除原来的文件
Os.rename(‘file_back’,’file’)   #将新的文件重命名为原来文件的名字

文件操作详解

打开文件的模式

只读  R只写   W追加写   a不能读R+可读可写 w+可写可读 a+ 可读可追加 ps: 以上六种方式都可+b进行操作 最常用的是R W A三种方式其他的尽量不要用 切记在文件处理的时候不要同时对同一个文件进行读和写俩种方式的操作

文件光标移动

一:Read(3)

1. 文件打开方式为文本模式时,代表读取3个字符

2. 文件打开方式为b模式时,代表读取3个字节

二 其余的文件光标都是以字节位单位的,例如:seek   tell    truncate

注意: 

1. seek有三种移动方式0,12,其中0和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
 

    (1)f.seek(p,0)  移动当文件第p个字节处,绝对位置

 

    (2)f.seek(p,1)  移动到相对于当前位置之后的p个字节

 

    (3)f.seek(p,2)  移动到相对文章尾之后的p个字节

示例

        f = open('d:/hello.txt','w') 
        f.write('hello my friend python!\nsecond line.')

        f = open('d:\hello.txt','r') 
        (1)print(f.readlines())   #result:  ['hello my friend python!\n', 'second line.'],f.tell()=37  文件读到的位置

        (2)print(f.readline())       #result:  
               print 'f.tell(): ',f.tell()  

               print(f.readline())        
               print 'f.tell(): ',f.tell()  

          #result:

               hello my friend python!

               f.tell():  25
               second line.
               f.tell():  37

         (3)print(f.read())
             print 'f.tell(): ',f.tell()

             #result

                 hello my friend python!
                 second line.
                 f.tell():  37

 

2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果 

 tell()方法返回的文件内的文件读/写指针的当前位置。

语法:

fileObject.tell()

返回值:

此方法返回该文件中读出的文件/写指针的当前位置

示例:

fo = open("foo.txt", "rw+")
print "Name of the file: ", fo.name
 
line = fo.readline()
print "Read Line: %s" % (line)
 
pos = fo.tell()
print "Current Position: %d" % (pos)
 
fo.close()

当我们运行上面的程序,它会产生以下结果:

Name of the file: foo.txt
Read Line: This is 1st line

with上下文管理

打开一个文件包含两部分资源:操作系统级打开的文件+应用程序的变量。在操作完毕一个文件时,必须把与该文件的这两部分资源一个不落地回收,回收方法为:
1、f.close() #回收操作系统级打开的文件
2、del f #回收应用程序级的变量

文件管理(推荐方式)

其中del f一定要发生在f.close()之后,否则就会导致操作系统打开的文件还没有关闭,白白占用资源,
而python自动的垃圾回收机制决定了我们无需考虑del f,这就要求我们,在操作完毕文件后,一定要记住f.close()

虽然这么说,但是很多时候还是会忘记f.close(),因此我们推荐傻瓜式操作方式:使用with关键字来帮我们管理上下文

with open('a.txt','w') as f:
    pass
 
with open('a.txt','r') as read_f,open('b.txt','w') as write_f:
    data=read_f.read()
    write_f.write(data)
可以同时打开俩个文件使用该方法可以不用关闭文件(即可以不使用f.cloese())                          

文件的修改

文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式:

方式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)

<span role="heading" aria-level="2">python文件处理
<span role="heading" aria-level="2">python文件处理

import os

with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
    data=read_f.read() #全部读入内存,如果文件很大,会很卡
    data=data.replace('alex','SB') #在内存中完成修改

    write_f.write(data) #一次性写入新文件

os.remove('a.txt')
os.rename('.a.txt.swap','a.txt') 

View Code

方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件

import os

with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
    for line in read_f:
        line=line.replace('alex','SB')
        write_f.write(line)

os.remove('a.txt')
os.rename('.a.txt.swap','a.txt') 

注意 千万不要修改当前的文件

示例文件:

Wusir|66|male
Alex|83|female
Egon|50|male

示例:

Import os 引入os模块(用来和操作系统进行交互)
f=open(‘file’,r,encoding=’utf-8’)
F2=open(‘file_back’,w,encoding=’utf-8’)
For line in f:
User_liest=Line.splite(‘|’)
User_list[0]=user_list[0]+’_somebody’
User_str=’|’.join(user_list)
Print(user_str)
F2.wtrite(user_str)
F.close()
F2.close()
Os.remove(‘file’) #删除原来的文件
Os.rename(‘file_back’,’file’) #将新的文件重命名为原来文件的名字

  

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/124533.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • datagrip2021激活码【注册码】

    datagrip2021激活码【注册码】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • C语言实现【关机程序】「建议收藏」

    C语言实现【关机程序】「建议收藏」在讲解关机程序前,必须得先知道一个库函数system(“shutdown-s-t60”)和system(“shutdown-a),其中“shutdown-s”表示关机,“shutdown-a”表示取消关机,“-t60”表示延迟60秒;而要使用该库函数就得引头文件#include<stdlib.h>。下面开始实现关机程序了:#include<stdio.h>#include<stdlib.h>#include<string.h>int.

  • matplotlib颜色代码_matplotlib color

    matplotlib颜色代码_matplotlib color命令形如:plt.plot(x,y,linewidth=’1′,label=”test”,color=’red’,linestyle=’:’,marker=’|’)plt.legend(loc=’upperleft’)plt.show()线条形式(linestyle):’-‘solidlinestyle’–‘dashedli…

    2022年10月15日
  • maven配置本地仓库位置_在setting中配置自己的仓库

    maven配置本地仓库位置_在setting中配置自己的仓库在MAVE_HOME/conf/settings.xml文件中配置本地仓库位置:eclipse与maven配置指定maven安装目录UserSetting配置在eclipse中配置使用的maven的setting.xml文件,使用maven安装目录下的setting.xml文件。注意:如果修改了setting.xml文件需要点击上图中的“updatesettings”按钮

  • 视频直播之基础原理

    视频直播之基础原理SDK(SoftwareDevelopmentKit):软件开发工具包涉及的技术:采集处理编码封包推流播放RTMP(RealTimeMessagingProtocol,实时消息传送协议),是AdobeSystems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。优点:主流CDN支持,市面上绝大多数的直播产品采用;协议简单易实现缺点:基于…

  • 深入理解字符串和字节数组转换

    深入理解字符串和字节数组转换

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号