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’) #将新的文件重命名为原来文件的名字

  

 

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

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

(0)
上一篇 2022年3月29日 下午12:35
下一篇 2022年3月29日 下午12:35


相关推荐

  • MiFlash提示“错误代码”为“0xffffffff”[通俗易懂]

    MiFlash提示“错误代码”为“0xffffffff”[通俗易懂]当MiFlash提示“未指定的错误”时,我们可以根据其后的错误代码来寻求问题的解决方法。当MiFlash提示“错误代码”为“0xffffff01”时,表明“MiFlash找不到指定的文件”。对此我们可以通过以下方法来解决:右击“计算机”图标,从弹出的右键菜单中选择“属性”项。从打开的“系统属性”窗口中,点击左上角的“高级系统设置”按钮进入详细设置界面。待打开“系统属性”窗口后,切换到“高级”选项卡,点击“环境变量”按钮打开其设置对话框。从打开的“环境变量”窗口中,从“系统变量”列表中找到“Path

    2022年5月16日
    102
  • 2022年Redis最新面试题第6篇 – Redis淘汰策略「建议收藏」

    2022年Redis最新面试题第6篇 – Redis淘汰策略「建议收藏」Redis过期键的删除策略?出现概率:★★★★Redis过期键的删除策略是:定期删除+惰性删除。1)、关于定期删除,Redis默认会每隔100ms就随机选取一些已经过期了的key,检查其是否过期,如果已经过期就删除。不过假设Redis里放了100w个key,而且都设置了过期时间,你每隔几百毫秒,就检查100w个key,那Redis基本上就卡死了,cpu负载也会很高的,基本都消耗在检查过期key上了。注意,这里可不是每隔100ms就遍历所有的设置过期时间的key,那样就是一场性能上的灾难。实际情况是每

    2022年10月21日
    5
  • 零基础开发AI Agent:手把手教你用扣子做智能体PDF

    零基础开发AI Agent:手把手教你用扣子做智能体PDF

    2026年3月16日
    2
  • QQ支持接入「小龙虾」

    QQ支持接入「小龙虾」

    2026年3月13日
    2
  • WeakHashMap类

    WeakHashMap类一代码示例importjava.util.*;publicclassWeakHashMapTest{ publicstaticvoidmain(String[]args) { WeakHashMapwhm=newWeakHashMap(); //HashMapwhm=newHashMap(); //将WeakHashM…

    2022年5月31日
    39
  • ufw 应用

    ufw 应用ufw 应用查看 ufw 规则 ufwstatusnum 删除 ufw 规则 ufwdelete num 添加 ufw 规则 ufwallowprot xxx xx xtoanyport63 后记 ufw 还是挺简单好用的 不过个人还是习惯用最原始的 iptables 可以看成是 iptables 的一种简化 后遗症是你需要记 ufw 的语法规则 ubuntu 下面还

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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