Python基础 - 12.文件

文件

    • 打开关闭文件
    • 读文件
    • 写文件
    • 编码问题
    • with open() as 读写文件
    • 本章项目源码

打开关闭文件

通过open()函数可以打开文件。返回文件的对象

open(文件名,打开的权限)

其中:

文件名可以为绝对路径,也可以为相对路径

绝对路径需要加上盘符(C:/xxx.txt、D:/python/yyy.py)

相对路径指基于当前路径的位置偏移(xxx.txt、…/yyy.txt、dir/zzz.txt)

打开的权限:

  • r:如果文件存在,只读;如果文件不存在,报错

  • w:如果文件不存在,创建文件,只写;如果文件存在,清空文件,只写

  • a:如果文件不存在,创建文件,只写;如果文件存在,在文件的后面追加内容,只写

  • rb:以二进制的方式打开文件。如果文件存在,只读;如果文件不存在,报错

  • wb:以二进制的方式打开文件。如果文件不存在,创建文件;如果文件存在,清空文件,只写

  • ab:以二进制的方式打开文件。如果文件不存在,创建文件;如果文件存在,在文件的后面追加内容

  • r+:如果文件存在,读写;如果文件不存在,报错

  • w+:如果文件不存在,创建文件,读写;如果文件存在,清空文件,读写

  • a+:如果文件不存在,创建文件,读写;如果文件存在,在文件的后面追加内容,读写

  • rb+:以二进制的方式打开文件。如果文件存在,读写;如果文件不存在,报错

  • wb+:以二进制的方式打开文件。如果文件不存在,创建文件,读写;如果文件存在,清空文件,读写

  • ab+:以二进制的方式打开文件。如果文件不存在,创建文件,读写;如果文件存在,在文件的后面追加内容,读写

通过文件对象的close()方法可以关闭文件。

# 打开文件
f = open('test.txt', 'r')
# 通过f对象对文件进行读写操作
# ......
print(f)
# 通过f对象的close()方法关闭文件
f.close()

读文件

要读取文件的内容,需要以r、r+的方式打开文件。

当文件打开后,通过文件对象的read()可以读取文件的内容,一般有如下用法:

read(size):读取指定的大小字节数

read():读取所有内容

注意一点:打开文件的时候,有一个指针指向当前读写的位置

f = open('test.txt', 'r')

#1234567
#abcdefg
#xyz

# 读取5字节
content = f.read(5)
print(content)# 12345

content2 = f.read(2)
print(content2) # 67

content3 = f.read(3)
print(content3) # abc

f.close()

在这里插入图片描述

f = open('test.txt', 'r')

# 把所有内容统统读出来
content = f.read()
print(content)

f.close()

在这里插入图片描述

另外,可以通过readline()读一行。如果读不到数据,readline()会返回空字符串。

f = open('test.txt', 'r')

# 读一行
while True:
    content = f.readline()
    if content != '':
        print(content)
    else:
        break

f.close()

在这里插入图片描述

可以通过readlines()读多行(把所有的行都读出来),并以列表的方式返回

f = open('test.txt', 'r')

content = f.readlines()
print(content)

f.close()

在这里插入图片描述

写文件

要往文件里面写入内容,需要以w、w+、a、a+的方式打开文件。

通过文件对象的write()方法写入文件

f = open('test3.txt', 'w')

f.write('helloworld')

f.close()

如果要把其他类型的数据写入文件中(因为write的参数是字符串),所以要把这些数据通过str()转换为字符串类型。

f = open('test3.txt', 'w')

list1 = [1,1,2,3,5,8,13,21,34]

f.write(str(list1))

f.close()

编码问题

UTF8、gb2312、gbk、ASCII ANSI、……

ASCII:0~127共128个码。

扩展的ASCII码表(也叫ANSI格式的编码)

gb2312——gbk

gbk是gb2312的扩展

Unicode编码。国际通用的编码 兼容ASCII码表。

我们一般通用的utf-8是unicode编码。

str = '\u4eca\u5929\u661f\u671f\u4e94'

f = open('test3.txt', 'w', encoding='utf-8')

f.write(str)

f.close()

如果是从网络上下载数据,建议在open()函数中,把encoding=”utf-8”加上。

在网络传输通信的时候,通常需要把中文转换为unicode编码的格式

参考下面的代码

str = '你好'
str = str.encode('gbk')
print(str)
str = '你好'
str = str.encode('utf-8')
print(str) # b'\xe4\xbd\xa0\xe5\xa5\xbd'

# 把str通过网络传送到服务器

# 对方获取到信息
str = b'\xe4\xbd\xa0\xe5\xa5\xbd'
str = str.decode('utf-8')
print(str)

在这里插入图片描述

with open() as 读写文件

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try … finally来实现:

try:
    f = open('/path/', 'r')
    print(f.read())
finally:
    if f:
        f.close()

每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

with open('/path/to/file', 'r') as f:
    print(f.read())

这和前面的try …
finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。

本章项目源码

URL:https://gitee.com/yuanbaonet/master_python/tree/baoai_python_v12/

对应版本:baoai_python_v12

对应文件:sample/python/p12.py

你可能感兴趣的:(python)