Python文件操作

Posted 刘新元

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python文件操作相关的知识,希望对你有一定的参考价值。

简介

引子

现在这个世界上,如果可以操作文件的所有软件都消失了,比如word,wps等等,此时你的朋友通过qq给你发过来一个文件,文件名是:美女模特空姐护士联系方式.txt,在座的所有男同学,那么你接受到这个文件之后,你的内心是否有一丝冲动,当然咱们不是那种闷骚的人,其实我们就是比较好奇,就是想要看看里面写的是什么,仅此而已,绝不联系。但是我说了所有可以操作文件的软件全部都没了,那么你是不是百爪挠心,火急火燎,哎呀。别急呀,你忘了么?你学过Python这门编程语言,这个语言肯定有能操控文件的功能。我相信在这种强大的动力下,你是可以,必须能学会的。

  • 编码方式

    utf-8,gbk,gb2312....  (昨天刚讲完编码,文件其实就是数据的存储,数据存储你需要编码知道这个数据是以什么编码存储的)

  • 操作模式

    只读,只写,追加,写读,读写....

1 文件的读

  • read()
    读取全部
file = open(\'D:\\内容.txt\',encoding=\'utf-8\',mode=\'r\')

print(file.read())

file.close()

\'\'\'
open内置函数,open底层调用的是操作系统接口。
f1,变量 f1 fh file f_h 文件句柄
\'\'\'

  • read(n)
    指定字符个数进行读

file = open(\'D:\\内容.txt\',encoding=\'utf-8\',mode=\'r\')

print(file.read())

file.close(1)
>>>
详
  • readline()
    按行读
file = open(\'D:\\内容.txt\',encoding=\'utf-8\',mode=\'r\')

print(file.readline()

file.close(1)

  • readlines()

readlines() 返回一个列表,列表里面每个元素是原文件的每一行,如果文件很大,占内存,容易崩盘。


f = open(\'log\',encoding=\'utf-8\')
print(f.readlines())
f.close()
# 结果[\'666666\\n\', \'fkja l;\\n\', \'fdkslfaj\\n\', \'dfsflj\\n\', \'df;asdlf\\n\', \'\\n\', ]
  • for 循环读取

可以通过for循环去读取,文件句柄是一个迭代器,他的特点就是每次循环只在内存中占一行的数据,非常节省内存。


f = open(\'../path1/弟子规\',mode=\'r\',encoding=\'utf-8\')
for line in f:
    print(line)      #这种方式就是在一行一行的进行读取,它就执行了下边的功能

print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
f.close()
  • rb读取图片(bytes)

 rb模式:以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。记住下面讲的也是一样,带b的都是以二进制的格式操作文件,他们主要是操作非文字文件:图片,音频,视频等,并且如果你要是带有b的模式操作文件,那么不用声明编码方式。

file = open(\'D:\\美女.jpg\',mode=\'rb\')

img = file.read()

file.close()

f1 = open(\'美女.jpg\',mode=\'wb\')

f1.write(img)

f1.close()
>>> 
会创建一个名字为美女.jpg图片

2 文件的写

  • wb模式

wb模式:以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如:图片,音频,视频等。

file = open(\'D:\\美女.jpg\',mode=\'rb\')

img = file.read()

file.close()

f1 = open(\'美女.jpg\',mode=\'wb\')

f1.write(img)

f1.close()
>>> 
会创建一个名字为美女.jpg图片
  • w模式

如果文件不存在,利用w模式操作文件,那么它会先创建文件,然后写入内容.

f1 = open(\'文件.txt\',encoding=\'utf-8\',mode=\'w\')     #没有会在当前目录下创建一个这样文件,有责覆盖里的内容

print(f1.write("Hello python"))

f1.close()
  • a追加模式

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入

如果文件不存在,利用a模式操作文件,那么它会先创建文件,然后写入内容。

f1 = open(\'文件.txt\',encoding=\'utf-8\',mode=\'a\')     

print(f1.write("\\nHello python"))

f1.close()

  • r+读写模式
    打开一个文件用于读写。文件指针默认将会放在文件的开头。

 如果你在读写模式下,先写后读,那么文件就会出问题,因为默认光标是在文件的最开始,你要是先写,则写入的内容会讲原内容覆盖掉,直到覆盖到你写完的内容,然后在后面开始读取。

f1 = open(\'文件.txt\',encoding=\'utf-8\',mode=\'r+\')

print(f1.read())
print(f1.write("\\nHello python"))

f1.close()
 

3 文件的另一种打开方式


# 1,利用with上下文管理这种方式,它会自动关闭文件句柄。
with open(\'t1\',encoding=\'utf-8\') as f1:
    f1.read()
    
# 2,一个with 语句可以操作多个文件,产生多个文件句柄。
with open(\'t1\',encoding=\'utf-8\') as f1,\\
        open(\'Test\', encoding=\'utf-8\', mode = \'w\') as f2:
    f1.read()
    f2.write(\'老男孩老男孩\')
    

4 文件的修改

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


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\')   #将新建的文件重命名为原文件

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


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\') 

以上是关于Python文件操作的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记:python3,代码片段(2017)

常用python日期日志获取内容循环的代码片段

VSCode自定义代码片段——git命令操作一个完整流程

使用 Python 代码片段编写 LaTeX 文档

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程