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)


相关推荐

  • 文件操作(File类等)API摘要[通俗易懂]

    文件操作(File类等)API摘要[通俗易懂]Console此类包含多个方法,可访问与当前Java虚拟机关联的基于字符的控制台设备(如果有)。虚拟机是否具有控制台取决于底层平台,还取决于调用虚拟机的方式。如果虚拟机从一个交互式命令行开始启动,且没有重定向标准输入和输出流,那么其控制台将存在,并且通常连接到键盘并从虚拟机启动的地方显示。如果虚拟机是自动启动的(例如,由后台作业调度程序启动),那么它通常没有控制台。如果此虚拟机具

  • LK金字塔光流法与简单实现

    LK金字塔光流法与简单实现LK金字塔光流法

  • 无人机视觉定位是怎么回事_drone无人机怎么下APP

    无人机视觉定位是怎么回事_drone无人机怎么下APPhttp://www.aiskyeye.com/2018年已经办过一年了。2019年在ICCV上办。Weencouragetheparticipantstousetheprovidedtrainingdataforeachtask,butalsoallowthemtouseadditionaltrainingdata.Theuseofadd…

  • html css制作404页面,一款纯css3实现的漂亮的404页面

    html css制作404页面,一款纯css3实现的漂亮的404页面实现的代码。html代码:404ERRORLost?MaybeIcanhelp.required/>SearchMySuggestions.HomePortfoliocss3代码:body{background-color:#0A7189;color:#fff;font:100%”Lato”,sans-serif;font-size:1.8r…

  • 如何定义多个context:property-placeholder配置

    如何定义多个context:property-placeholder配置今天在配置多配置文件的时候偶然发现如果我使用<context:property-placeholderlocation=”classpath:jdbc.properties”/><context:property-placeholderlocation=”classpath:freemarker.properties”/>//这个进行多行编写配置文件的时候会出现后面那个文件出现读取不到的问题这样会导致后面那个配置文件失效原因:Spring只会加载第一个cont

  • mybatis 缓存的使用, 看这篇就够了「建议收藏」

    mybatis 缓存的使用, 看这篇就够了「建议收藏」缓存的重要性是不言而喻的。使用缓存,我们可以避免频繁的与数据库进行交互,尤其是在查询越多、缓存命中率越高的情况下,使用缓存对性能的提高更明显。mybatis也提供了对缓存的支持,分为一级缓存和二级缓存。但是在默认的情况下,只开启一级缓存(一级缓存是对同一个SqlSession而言的)。以下的项目是在mybatis初步使用(IDEA的Maven项目,超详细)的基础上进行。…

发表回复

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

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