转载请注明预见才能遇见的博客:http://my.csdn.net/
原文地址:https://blog.csdn.net/pcaxb/article/details/91982984
人工智能系列-Python系列(六)文件操作
目录
2)读取一行,如果使用了read读取了,就是整个文件都读取了,就不能再读取
1.如果不知道文件编码,就使用latin-1 ,拉丁编码基本都支持
4.刷新文件,修改文件之后需要刷新文件,不然文件就是没有保存的
2)其余的文件内光标移动都是以字节为单位如seek,tell,truncate
一、文本模式打开文件
# 注意 open这里读取的格式是系统格式,所以这里需要设置文件格式
# 打开文件,得到文件句柄并赋值给一个变量
# r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
# w,只写模式【不可读;不存在则创建;存在则清空内容】
# a, 之追加写模式【不可读;不存在则创建;存在则只追加内容】
# 扩展:
# "+" 表示可以同时读写某个文件
# r+, 读写【可读,可写】
# w+,写读【可读,可写】
# a+, 写读【可读,可写】
# file1 = open("file1", 'r+', encoding='utf-8')
1.读文件
# 通过句柄对文件进行操作
# data = file1.read() # 默认情况是只读
# print(data) # 打印文件内容
1)判断是否可读
print(file1.readable()) #
2)读取一行,如果使用了read读取了,就是整个文件都读取了,就不能再读取
print(file1.readline())
3)读取文件所有内容,然后放到列表中
print(file1.readlines())
2.写文件
# file1.write('1-2222222222\n')
# file1.write('2-2222222222\n')
# file1.write('3-2222222222\n')
1)判断是否可写
# print(file1.writable()) #
# names = ['111\n', '222\n', '333\n'] # 文件内容只能是字符串
# file1.writelines(names)
3.追加文件
# 如果 open("file1", 'a', encoding='utf-8') 这里的模式设置的是a ,write就是追加写
4.读写文件
# file1.write("kkkk") # 这里是覆盖文件
# content = file1.read()
# print(content)
5.修改文件
# 把文件中的111全部替换成一一一
# datas = file1.readlines()
# datasc = []
# print(datas)
# for data in datas:
# data = data.replace('111', '一一一')
# datasc.append(data)
# print(datasc)
# file1.writelines(datasc)
# file1.write("HHHH")
6.with xxx as xxx文件
# with open('file1','r+',encoding='utf-8') as f1:
# with open('file1', 'r', encoding='utf-8') as f1, \
# open('file2', 'w', encoding='utf-8') as f2:
# f1_data = f1.read()
# f2.write(f1_data)
# f1.close()
# f2.close()
7.关闭文件
file1.close()
二、非文本模式打开文件
# 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,
# 使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
# rb、wb、ab
# 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
1.b的方式不能指定编码
# file1 = open('file1', 'rb+')
# data = file1.read()
# print(data) # rb读取的是二进制
2.二进制和其他编码互转
# encode:字符串--bytes
# decode:bytes--字符串
1)二进制转换成uft-8
# print(data.decode('UTF-8')) # 二进制转换成uft-8
2)uft-8换成二进制
# file1.write('===你你你'.encode('utf-8'))
# file1.write(bytes('+++我我我', encoding='utf-8'))
三.文件的其他函数
1.如果不知道文件编码,就使用latin-1 ,拉丁编码基本都支持
file1 = open('file1', 'r', encoding='UTF-8')
2.判断文件是否关闭
print(file1.closed) # False
3.文件编码
print(file1.encoding) # utf-8
4.刷新文件,修改文件之后需要刷新文件,不然文件就是没有保存的
# file1.flush()
# print(file1.name) # file1 文件名字
5.文件内光标移动
1)read(3):
# a)文件打开方式为文本模式时,代表读取3个字符
# b)文件打开方式为b模式时,代表读取3个字节
2)其余的文件内光标移动都是以字节为单位如seek,tell,truncate
# a)seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
# b)truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果
# tell 光标所在位置
# print(file1.tell()) # 0
# file1.readline()
# print(file1.tell()) # 18
6.读取文件中真正的换行符号newline
file2 = open('file2', 'r', encoding='utf-8', newline='')
print(file1.readlines())
print(file2.readlines())
7.seek移动光标的位置
# file1.seek()
file1.seek(5)
print(file1.tell()) # 5
file1.seek(32)
print(file1.tell())
参考资料;https://www.cnblogs.com/linhaifeng/articles/5984922.html
人工智能系列-Python系列(六)文件操作