本帖最后由 qianshang666 于 2021-2-6 14:03 编辑
大家好,今天讲讲python中的文件操作(由于本人并没有发表过太多帖子,排版不合适等问题希望大家可以理解)
文件操作:文件操作包含读取文件和写入文件,接下来就一一介绍
1.打开文件函数 open(),函数open()接受一个参数,就是要打开文件的名称
[Python] 纯文本查看 复制代码 file_reader = open("yundu.txt")
print(file_reader)
上面两行命令运行结果却是:
这个并不是我们希望看到的结果
是因为函数open()返回的是一个表示文件的对象,在这里,open(“yundu.txt”)返回一个表示文件yundu.txt的对象,python将该对象赋值给file_reader供以后使用
open()函数有一个需要注意的问题,就是我们打开了它,但我们没有调用close()关闭,如果程序存在bug导致close()未执行,文件就不会关闭,这看似微不足道,但可能导致数据丢失
2.关键字with,关键字with在不需要访问文件后将其关闭,你只管打开文件,并在需要的时候使用它,python自然会在合适的时间自动将其关闭
[Python] 纯文本查看 复制代码 with open("yundu.txt") as file_data:
content = file_data.read()
print(content)
上面的命令第一行是我们通过with关键字表示打开文件的文件对象,as后面的就是文件对象名,然后在第二行,使用方法read()读取这个文件的全部内容,
并将其作为一个长长的字符串赋值给变量content,这样我们就能通过打印content的值将这个文本文件的全部内容显示出来了
3.关于文件路径,如果按照我上面的两种方式打开文件,那文本文件必须要在当前执行文件所在的目录中
文件的相对路径是让python到指定的位置去查找,而该位置是相对于当前运行的程序所在目录的
例如:你程序文件在POST文件夹中,该文件夹下面又有一个file文件夹,而yundu.txt文本在file文件夹下,代码就可以这样写
[Python] 纯文本查看 复制代码 with open('file/yundu.txt') as file_data:
这行代码让python到文件夹POST下的文件夹file文件下中查找指定的.txt文件
注意:显示文件路径时,Windows系统使用反斜杠(\)而不是斜杠(/),但我们在python代码中依然可以使用斜杠
文件的绝对路径是指文件在计算机中的指定位置,绝对路径一般较长,我们先将其赋值给一个变量,再将该变量传递给open()
这个就是绝对路径
注意:如果在文件路径中使用反斜杠,将引发错误,因为反斜杠可能会对字符串进行转义,例如,对于路径“c:\path\to\file.txt”,其中\t将被解读为制表符,
如果一定要使用反斜杠,可对路径中的每个反斜杠都进行转义,如:“c:\\path\\to\\file.txt”,也可以在路径前面加r,表示强制转义,文件名尽量不要用中文
4.读取和写入
open()第一个参数是文件名称,第二个参数就是读写模式:读取模式('r'),写入模式('w'),附加模式('a'),读写模式('r+'),如果省略模式参数,将以读取模式打开文件
(1)读取模式我们在上面介绍过了,接下来我们介绍一下读取模式中的逐行读取:
[Python] 纯文本查看 复制代码 with open('yundu.txt') as file_data:
for line in file_data:
print(line)
通过对文件对象执行循环来遍历文件中的每一行,然后打印输出,但是我们发现有了空白行,因为在每行末尾都有一个看不见的换行符,而函数调用print()也会加上一个换行符
消除这些多余的空白,可以调用函数strip()
(2)写入模式是保存数据最简单的方式之一,如果要写入的文件不存在,函数open()将自动创建它,如果存在,写入之前会清空它
[Python] 纯文本查看 复制代码 path = 'write.txt'
with open(path,'w') as file_data:
file_data.write("zifeiyu")
这样就将文本写入文件了,python只能将字符串写入文本文件,如果要将数值存储在文本文件之中,必须先使用函数str()将其转换为字符串格式。
如果要写入多行要注意一个问题,就是如果写入多行不指定换行符的话,内容将会挤在同一行
写入时要注意open()函数的第三个参数,就是encoding,也就是编码,如果你不进行编码直接存入文字的话,就会变成乱码,文字编码一般我们使用utf-8
[Python] 纯文本查看 复制代码 path = 'write.txt'
with open(path,'w',encoding='utf-8') as file_data:
file_data.write("zifeiyu\n")
file_data.write("日暮便是归途\n")
这样就不会时乱码了,我们打开文本看看
(3)附加到文件就是给文件添加内容,不覆盖原有的内容,如果指定文件不存在,将创建一个空文件,我用上一个write文件演示一下
[Python] 纯文本查看 复制代码 path = 'write.txt'
with open(path,'a',encoding='utf-8') as file_data:
file_data.write("zifeiyu\n")
file_data.write("日暮便是归途\n")
我们将模式改为附加,再运行一般程序,write文本就会多出两行
(4)图片,音乐,视频的写入要使用二进制的方式,写入模式是'wb',而且要使用content方法写入
[Python] 纯文本查看 复制代码 img = requests.get("https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2534506313,1688529724&fm=26&gp=0.jpg")
with open('img.jpg','wb')as f:
f.write(img.content)
这个大家先眼熟一下即可,后面讲到爬虫篇的时候会深入讲解的
以上例子均是使用文本文件做演示,但写入文件并不只是能在txt文件中,也可以是表格,文档,修改后缀名即可,大家可以自行感受 |