017 Python中的文件

一、什么是文件 file

 

定义

1.是用于数据存储的单位

2.通常用来长期存储数据

3.文件中的数据是以字节为单位进行顺序存储

操作流程

1.打开文件

2.读/写文件

3.关闭文件

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

二、文件的函数

打开函数open

语法

Open(file, mode=‘rt’)

作用

用于打开一个文件,返回此文件流对象,如果打开文件失败,则会触发OSError错误

Ps:文件流对象可以对文件进行操作

Ps:文件流对象是可迭代对象

关闭函数close

语法

f.close()

作用

关闭文件,释放系统资源

示例 file_open.py

#file_open.py


# 示范文件的打开,读取及关闭
# 第一步,打开文件
f = open('myfile.txt', 'rt')  #返回文件流对象
print("打开文件成功")

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

# 第三步,关闭文件
f.close()
print("文件已关闭")



# 打印结果:
# 打开文件成功
# 文件中的全部内容是: abc123
# 文件已关闭

示例 file_open2.py   OSError

#file_open2.py
# 示范文件的打开,读取及关闭

try:
    f = open('myfile222222.txt', 'rt')  
    print("打开文件成功")
    
    s = f.read()   
    print("文件中的全部内容是:", s)

    f.close()
    print("文件已关闭")
    
except OSError:
    print("文件打开失败")


# 打印结果:
# 文件打开失败

三、文本文件模式

3.1 模式字符

‘t’(默认)

1.默认文件中存储的数据为字符数据,以为单位分隔,在python内部统一用‘\n’作为换行符进行分隔

2.对文本文件的读写需要用字符串(str)进行读取和写入数据

3.2 各操作系统的换行符

Linux

‘\n’

Windows

‘\r\n’

旧的macintosh

‘\r’

新的mac os

‘\n’

说明

在文件模式下,各操作系统的换行符在读入python内部时转换为字符‘\n’

示例 file_read_text.py

#file_read_text.py


# 示意 以文本文件模式读取myfile.txt中的内容

try:
    f = open("myfile.txt")
    print("打开文件成功!")
    #读取文件内容
    # s = f.read()  #读取全部内容
    s = f.read(3)   #读取3个字符
    print("字符串s的长度是:", len(s),'内容是:',s)     #abc
    s2 = f.read(3)
    print("第二次读取的字符是:",s2)  #123
    s3 = f.read(5)
    print("第三次读取的字符是:",s3)  #中文\nAB
    s4 = f.read()
    print("第四次读取的字符是:",s4)   # C英文
                                    # hello world
                                    # 读取剩下的全部字符

    f.close()

except OSError:
    print("打开文件失败")


# s = f.read()打印结果:
# 打开文件成功!
# 字符串s的长度是: 26

# 自动调用decode转成字符串

# ls -l myfile.txt 的打印结果:
# -rw-rw-r-- 1 tarena tarena  34 6月  25 10:09 myfile.txt

示例file_readline_text.py

# file_readline_text.py

# 示意 f.readline() 读取文件中的一行

try:
    f = open("myfile.txt")
    print("打开文件成功!")
    #读取文件内容
    
    while True:
        s = f.readline()
        if s == '':
            print("已经读取到了文件末尾")
            break
        print("读到的一行是:", s)

    f.close()

except OSError:
    print("打开文件失败")

#打印结果----------------------------------
# 打开文件成功!
# 读到的一行是: abc123中文

# 读到的一行是: ABC英文

# 读到的一行是: hello world
# 已经读取到了文件末尾


# 交互模式下-------------------------------
# 'abc123中文\n'
# 会有'\n'


3.3 文件的迭代读取

Open返回的文件流对象是可迭代对象

示例

交互模式下:

f = open("myfile.txt")

for line in f:   #line= f.readline()

    print(line)

3.4 文本文件的写操作

‘w’

以只写方式打开,删除原有文件内容;

若文件不存在,则创建并打开

示例 file_write_text.py

 # file_write_text.py
 # 示意 写文本文件操作

f = open('mynote.txt','w')  #'w' ,以写模式打开文件
                            #如果没有这个文件,就创建一个

f.write('你好')
f.write('中国!')
#没有加'\n'就不会主动换行
f.writelines(['aaaa\n', 'bbbb\n','cccc\n'])
f.close()

#打印结果:
# 你好中国!aaaa
# bbbb
# cccc



#-----------------------------------------------
#'w' :再次打开,是重新写,把原来内容都删掉,不是追加内容


f = open('mynote.txt','w')  
f.write('你好')
f.close()
#打印结果:
# 你好

‘x’

有就报错,没有就创建

‘a’

以只写文件打开一个文件,如果有原文件则追加到文件末尾

示例 file_write_text_append.py

#file_write_text_append.py


f = open('mynote.txt','a')  #'a',代表追加方式打开  
f.write('我追加到了文件尾')
f.close()

#打印结果:
# 你好中国!aaaa
# bbbb
# cccc
# 我追加到了文件尾

四、 二进制文件模式

4.1 操作

默认的文件中存储的都是以字节为单位的数据,通常有人为规则的格式,需要以字节为单位进行读写

f.read()返回类型

1.对于文本模式(‘t’)打开的文件,返回字符串(str)

2.对于二进制模式(‘b’)打开的文件,返回字节串(bytes)

f.write(x)

1.对于文本模式,x必须为字符串

2.对于二进制模式,x必须为字节串

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

$  xxd  文件名

示例 file_write_binary.py

#file_write_binary.py

#示意以二进制方式写文件到'data.bin'

try:
    f = open('data.bin','wb')   #文件打开,都要写try语句!!!
    print("打开文件成功")
    #写入数据
    b = b'\xe4\xb8\xad' #'中'
    f.write(b)
    f.write(b'\x00\x00')

    f.close()
except OSError:
    print("打开文件失败")

file_read_binary.py

# file_read_binary.py

file = open('data.bin','rb')

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

b = file.read()
print("其余的字节是:", b)

file.close()

4.2 方法

f.seek(偏移量offset,相对位置whence)

作用

改变当前文件的读写位置

偏移量

大于0代表向文件尾方向移动

小于0代表向文件头方向移动

相对位置

0代表从文件头开始偏移

1代表从当前位置开始偏移

2代表从文件尾开始偏移

注:

seek通常对二进制模式打开的文件进行操作

f.tell()

作用

返回当前文件读写位置(整数)

五、小结

文件操作的两种模式

‘b’

二进制模式,可以对图片、音频进行读写;

以字节为单位,所以可以用seek

‘t’

文本模式,对字符串进行读写;

以行为单位,所以不能用seek

文件的操作方法

read (n=-1)  /readline()  /readlines()

write(x)  /writelines(列表)

六、汉字编码

A.问题

10个汉字占多少个字节?

 

20 30 40都对,编码方式不一样;

20是gb系列(中国国标),30是utf-8(国际通用);

B.其中两种分类

国标系列

GB18030(二字节或四字节编码,共27533个汉字)

GBK(二字节编码,共21003个汉字)

GB2312(二字节编码,共6763个汉字)

(Windows常用)

国际标准

UNICODE32(UNICODE16)    <------>   utf-8

(Linux, Mac OS X, IOS, Android等常用)

说明

Python3的字符串内部都是用Unicode来存储字符

C. python编码(encode)字符串

‘gb2312’

‘gbk’

‘gb18030’

‘utf-8’,更通用,包含ASCII

‘ascii’,英文

D.编码注释

在python源文件第一行或第二行写下如下内容是告诉解释执行器此文件的编码类型是什么

# -*- coding: gbk -*-

#设置源文件编码格式为gbk

# -*- coding: utf-8 -*-

#设置源文件编码格式为utf-8


 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值