通过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)
由于文件读写时都有可能产生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