人工智能(python)开发 —— 文件(file)


一、文件的概念

1、文件 file

        文件是用于数据存储的单位
        文件通常用来长期存储数据
        文件中的数据是以字节为单位进行顺序存储的

2、文件的操作流程

        a、打开文件
        b、读/写文件
        c、关闭文件
                注: 任何的操作系统,同一个应用程序同时打开文件的数量有最大数限制,所以在用完文件后需要关闭

3、文件的函数

文件的打开方法

        F = open(file, mode='rt')  用于打开一个文件,返回此文件流对象,如果打开文件失败,则会触发OSError错误
文件的关闭方法
        F.close()    关闭文件,释放系统资源

4、示例

# 第一步打开文件
try:
    f = open('myfile.txt', 'rt')
    print("打开文件成功!")

    # 第二步读取文件
    s = f.read()  # 读取全部内容形成字符串用s绑定
    print("文件中的内容是:", s)

    # 第三步,关闭文件
    f.close()
    print("文件已关闭")
except OSError:
    print("文件打开失败")

5、文件的操作

        文本文件操作模式和二进制文件操作

二、文本文件操作模式

1、文本文件操作

        模式字符:'t'  (默认)

        a、 默认文件中存储的数据为字符数据,以行为单位分隔,采用系统默认的换行符进行分隔。
        b、对文本文件的读写需要用字符串(str)进行读取和写入数据

2、各个操作系统的换行符

        Linux换行符:                 '\n'
        Windows换行符:           '\r\n'
        旧的Macintosh换行符 : '\r'
        新的Mac OS换行符:      '\n'
说明
        在文件文件模式下,各操作系统的换行符在读入python内部时转换为字符'\n'

3、文件的迭代读取

        open返回的文件流对象是可迭代对象
示例

    f = open('myfile.txt')
    for line in f:
        print(line)

4、文本文件的写操作

        写文件模式有:'w'、'x'、'a'
详见:附录1
示例

f = open('mynote.txt', 'w')  # 'w' 代表以写模式打开文件

f.write('你好')
f.write('中国!')
f.write('\n')
f.write("hello china!")
f.writelines(['aaaa\n', 'bbbb\n', 'cccc\n'])

f.close()

4、flush函数

        write函数的数据保存在缓存中,遇到阻塞时候,在原文件中是看不到write的数据。
        flush函数可以把缓存中的数据强制写到磁盘上,然后就能在文件中看到write的数据了。
            注:由于Linux内核决定,当缓存中的字节为4096时,会自动把缓存数据写到磁盘。

例子

f = open("a.txt","w")

f.write("第一行数据")
f.flush()
s = input("暂停中...")
f.write("第二行数据")

f.close()

三、二进制文件操作模式

1、二进制文件操作

        打开模式:‘b’
        默认的文件中存储的都是以字节为单位的二进制数据,通常有人为规定的格式,需要以字节为单位进行读写
        对二进制文件的读写,需要用字节串(bytes)进行操作

2、函数

F.read() 的返回类型
        a、对于文本模式('t')打开的文件,返回字符串(str)
        b、对于二进制模式('b')打开的文件,返回字节串(bytes)
对于二进制文件
        F.read(n)/F.readline(n)返回字节串
        F.readlines(n) 返回字节串列表
        注:n代表最大字节数
F.write(x)
        a、对于文本模式,x必须为字符串
        b、对于二进制模式,x必须为字节串

示例

# 以二进制方式写文件到'data.bin'
try:
    f = open('data.bin', 'wb')
    print("打开文件成功")
    # 写入数据
    b = b'\xe4\xb8\xad'
    f.write(b)
    f.write(b'\x00\x00')

    f.close()
except OSError:
    print("打开文件失败")
file = open('data.bin', 'rb')

b = file.read(1)  # 读取一个字节
print("第一个字节是:", b)

b = file.read() # 读取所有的字节
print('其它所有字节是: ', b)
file.close()

3、seek() 方法

F.seek(offset,whence = 0)函数:
        offset偏移量:
                大于0的数代表向文件末尾方向移动
                    小于0的数代表向文件头方向移动
        whence相对位置
                0代表从文件头开始偏移
                1代表从当前位置开始偏移
                2代表从文件尾开始偏移
作用:改变当前文件的读写位置

示例

# 用F.seek方法来定位文件的读写位置
# 注: seek 通常对 二进制模式打开的文件进行操作

f = open('myfile.bin', 'rb')
print("刚打开文件时,文件的读写位置是:", f.tell())  #0

b = f.read(2)
print('刚读入的内容是:', b)
print('读取两个字节后的读写位置是:', f.tell())  # 2

# 想读取第五个字节开始的5个字节
# 定位
# f.seek(5, 0)  # 从头开始向后移动5个字节的位置
# f.seek(3, 1)  # 从当前的读写位置向后移动3个字节的位置
f.seek(-15, 2)  # 从文件尾向前移动15个字节的位置

print("seek 移动后的读写位置是:", f.tell())  # 5
b = f.read(5)  # 读取5个字节
print(b)  # b'abcde'

f.close()

4、tell() 方法

        作用:返回当前文件读写位置

5、以十六进制方式查看文件内容的命令

$ xxd 文件名

四、附录1

1、mode 模式字符的含义

字符 含义
'r' 以只读方式打开(默认)
'w' 以只写方式打开,删除原有文件内容(如果文件不存在,则创建该文件并以只写方式打开)
'x' 创建一个新文件, 并以写模式打开这个文件,如果文件存在则会产生"FileExistsError"错误
'a' 以只写文件打开一个文件,如果有原文件则追加到文件末尾
'b' 用二进制模式打开
't' 文本文件模式打开 (默认)
'+' 为更新内容打开一个磁盘文件 (可读可写)
  • 缺省模式是 'rt'
  • 'w+b' 可以实现二进制随机读写,当打开文件时,文件内容将被清零
  • 'r+b' 以二进制读和更新模式打开文件,打开文件时不会清空文件内容
  • 'r+' 以文本模式读和更新模式打开文件,打开文件时不会清空文件内容

2、python 文件常用方法

方法 说明
F.close() 关闭文件(关闭后文件不能再读写会发生ValueError错误)
F.readline() 读取一行数据, 如果到达文件尾则返回空行
F.readlines(max_chars=-1) 返回每行字符串的列表,max_chars为最大字符(或字节)数
F.writelines(lines) 每行字符串的列表
F.flush() 把写入文件对象的缓存内容写入到磁盘
F.read(size = -1) 从一个文件流中最多读取size个字符
F.write(text) 写一个字符串到文件流中,返回写入的字符数
二进制文件操作方法  
F.tell() 返回当前文件流的绝对位置
F.seek(offset, whence=0) 改变数据流的位置,返回新的绝对位置
F.readable() 判断这个文件是否可读,可读返回True,否则返回False
F.writable() 判断这个文件是否可写,可写返回True,否则返回False
F.seekable() 返回这个文件对象是否支持随机定位
F.truncate(pos = None) 剪掉 自pos位置之后的数据,返回新的文件长度(字节为单位)

五、附录2

        人工智能(python)—— 目录汇总



猜你喜欢

转载自blog.csdn.net/qq_27297393/article/details/80807331