Python之文件操作

Posted 熊猫的黑白照

tags:

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

一,文件操作基本流程

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

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

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

#1. 打开文件,得到文件句柄并赋值给一个变量
f=open(a.txt,r,encoding=utf-8) #默认打开模式就为r

#2. 通过句柄对文件进行操作
data=f.read()

#3. 关闭文件
f.close()

 可能出现的错误:

1.UnicodeDecodeError:文件存储和打开的方式不一样

2:路径中含有\t,\n时需要在路径之前添加r或者用\\转义

二,文件编码

f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8

#这就用到了字符编码的知识:若要保证不乱码,文件以什么方式存的,就要以什么方式打开。
f=open(a.txt,r,encoding=utf-8)

三,文件的打开模式

文件句柄 = open(‘文件路径’,‘模式’)

E:\\new.txt 绝对路径
相对路径:同一个文件夹下的文件就是相对路径

r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】

rb,一般用在非文字类型的文件:图片,视频  

  文件的下载和上传的功能用b模式

r+,读写(先读,后写 ) r+b

 

f = open(e:\新建文本文档.txt,r+,encoding = ‘utf-8)
print(f.read())
f.write(asdadd)
f.close()

五种读取模式:

1、f.read() 全部读出来

f = open(log,mode=r,encoding=utf-8)
content = f.read(3) # r 模式:n 是按照字符读取
print(content)
f.close()
f = open(log,mode=rb)
content = f.read(5) # rb 模式:n 是按照字节读取
print(content)
f.close()
# bytes ---> str
s = b\xe4\xb8\xb0\xe5\x8e.decode(utf-8)
print(s)

 

2、f.readline() 按行读

f = open(log,encoding=utf-8)
line = f.readline()
print(line)
line1 = f.readline()
print(line1)
f.close()

 

3、f.readlines() 每一行作为一个元素放在列表中

f = open(log,encoding=utf-8)
lines = f.readlines()
print(lines)
f.close()

 

4、 推荐方式:循环读取

f = open(log,encoding=utf-8)
for i in f:
    print(i)
f.close()

 

5、f.read(n)

r模式按照字符的数目读取

rb模式按照字节的数目读取

f = open(e:\新建文本文档.txt,r,encoding = gbk)
content = f.read(3)
print(content)
f.close()

补充:bytes-->str  一个汉字3个字节,4,5个会报错

s = b‘\xe4\xb8\xb0.decode(‘‘utf - 8‘)  print(s)  #丰

 

f.write(‘laozhang‘)  若果没有文件,则创建文件写内容,如果有文件则将原文件删除,再写。

f = open(log,w,encoding=utf-8)
f.write(‘laozhang是sb)
f.close()
f = open(log1,w,encoding=utf-8)
f.write(‘laozhang依然是sb)
f.close()

 

wb模式  需要将写入的字符串.encode转换成二进制,并添加编码

写读w+  先写后读,f.seek(0)光标移动到开头

f = open(log1,wb)
f.write(laozhang依然是sb.encode(utf-8))
f.close()

 

追加

只追加 a ab

f = open(e:\新建文本文档.txt,a,encoding = gbk)
f.write(3)
f.close()

 

断点续传用到了tell和seek,都是按照字节去调整光标位置。

.truncate截取,按照字节去截取。

with open(‘log‘,‘r‘,encoding = ‘utf-8‘) as f1:

  print(f1.read())

方法汇总:

def close(self, *args, **kwargs): # real signature unknown
        关闭文件
        pass

    def fileno(self, *args, **kwargs): # real signature unknown
        文件描述符  
        pass

    def flush(self, *args, **kwargs): # real signature unknown
        刷新文件内部缓冲区
        pass

    def isatty(self, *args, **kwargs): # real signature unknown
        判断文件是否是同意tty设备
        pass

    def read(self, *args, **kwargs): # real signature unknown
        读取指定字节数据
        pass

    def readable(self, *args, **kwargs): # real signature unknown
        是否可读
        pass

    def readline(self, *args, **kwargs): # real signature unknown
        仅读取一行数据
        pass

    def seek(self, *args, **kwargs): # real signature unknown
        指定文件中指针位置
        pass

    def seekable(self, *args, **kwargs): # real signature unknown
        指针是否可操作
        pass

    def tell(self, *args, **kwargs): # real signature unknown
        获取指针位置
        pass

    def truncate(self, *args, **kwargs): # real signature unknown
        截断数据,仅保留指定之前数据
        pass

    def writable(self, *args, **kwargs): # real signature unknown
        是否可写
        pass

    def write(self, *args, **kwargs): # real signature unknown
        写内容
        pass

常用方法:

read  readable readline readlines for循环

seek tell write writeable

 

 改动文件:

# 1,创建一个新文件.
# 2,读取原文件.
import os
with open(log,encoding=utf-8) as f1,    open(log.bak,w,encoding=utf-8) as f2:
    # 3,将原文件的内容通过你想要的方式进行更改,并写入新文件件.
    old_content = f1.read()
    new_content = old_content.replace(alex,SB)
    f2.write(new_content)
#4,将原文件删除.
os.remove(log)
#5,将新文件重命名原文件名.
os.rename(log.bak,log)

 



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

python之模块和包

python之基础篇——模块与包

《Python学习之路 -- Python基础之切片》

Python 之 Socket编程(TCP/UDP)

python基础之文件基本操作

python常用代码片段总结