python3基础16

day16

文件 File
 什么是文件
  文件是用于数据存储的单位
  文件通常用来长期存储数据
  文件中的数据是以字节(byte)为单位进行存储的


文件的操作流程:
 1.打开文件
 2.读/写文件
 3.关闭文件
 注:任何操作系统,一个应用程序同时打开文件的数量有最大数限制


文件的打开函数:
 open(file, mode='rt')   用于打开一个文件,返回此文件对应的文件流对象,如果打开失败则会触发OSError错误


文件关闭的方法:
 F.close    #关闭文件,释放系统资源

示例:
 file_open.py

#此示例示意文件打开和关闭的操作
try:
    f = open("mycode.txt")  #打开文件
    print("文件打开成功!")
   #读写文件
    #关闭文件
    f.close()
    print("文件已关闭")

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


 file_open_text.py

try:
    f = open("mycode.txt")  #打开文件
    print("文件打开成功!")
    #读写文件
    s = f.readline()   #读取一行   s = 'abcd\n'
    print('len(s)=',len(s),'内空是',s)
    s = f.readline()   #z再读取一行  s = '1234'
    print('len(s)=',len(s),'内空是',s)    
    s = f.readline()   #读取第三行行 s = ''
    print('len(s)=',len(s),'内空是',s)


    # L = f.readlines()
    # print(L)    #文本全部转换为字符串存放在列表中
    #关闭文件
    f.close()
    print("文件已关闭")

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


文本文件的操作:
  文本文件的模式字符 't'

  说明:
   1.对文本文件的读写需要用字符串str进行读取和写入数据
   2.默认文件中存储的都是字符(文字)                     数据,再读写中会自动进行编码转换操作
   3.以行为单位分隔,在python内统一'\n'作用换行符进行分隔

  各操作系统的换行符:
  Linux换行符:  '\n'
  Windows 换行符: '\r\n'
  旧的Macintosh换行符: '\r'
  新的Mac OS换行符: '\n'

文件流对象的常用方法见:
 python_base_docs_html/文件.html

练习一:
 自己写一个文件'info.txt'内部存一些文字信息如下:
 张三 20 100
 李四 21 96
 小王 20 98
 注: 
  以上信息用空格作为分隔符分开
 写程序将这些数据读取出来,并以如下格式打印出来:
   张三  今年 20 岁,成绩是:100
   李四  今年 21 岁,成绩是:96
   小王  今年 20 岁,成绩是:98


def read_info_txt():
    rl = []
    try:
        f = open("info.txt")
        L = f.readlines()
        for line in L:
            s = line.strip()   #去掉左右两侧的空白字符
            name, age, score = s.split()
            age = int(age)
            score = int(score)
            rl.append({'name':name, 'age':age, 'score':score})
        f.close()
        return rl    #返回列表
        
    except OSError:
        print("读取文件失败!")
L = read_info_txt()
print(L)

def print_info_txt(L):
    for d in L:
        print(d['name'],'今年',d['age'],'岁,成绩是:',d['score'])


print_info_txt(L)

pyhton文件的常用方法:


文本文件读方法:
  F.readline()
  F.readlines()
  F.read([字符数或字节数])

文本文件的写方法:
  模式字符串:'w' / 'x' / 'a'
  F.write(字符串)
  F.writelines(字符串列表)   
示例见:
  file_write_text.py

#如果不写第二个参数默认是: f = open("newfile",'rt') 


try:
    # f = open('mynewfile')   
    # f = open("/root/newlife.txt",'wt')   #失败会抛出异常
    # f = open('mynewfile.txt','w')
    # f = open('mynewfile.txt','x')   #如果文件已经存在,则报错
    f = open('mynewfile.txt','a')   #在原文件后面追加
    print("打开成功")
    #在此处进行写文件操作
    f.write("hello")
    f.write("word")
    f.writelines(['123','abc','ABC'])
    f.write("kaj")


    f.close()
    print("关闭文件成功!")
except OSError:
    print("创建文件失败")

注:流是具有先后顺序的数据,依次能存入一些排好顺序的数据


文件的迭代读取:
 文件流对象是可迭代对象,迭代过程将以换行符'\n'作为分隔符
 依次获取

示例:
 f = open('mynote.txt','rt')
 for line in f:  #f绑定的文件流对象是可迭代对象
    print(line)


练习二:
 1.写程序,读入任意行文字,当输入空行时结束输入
   先将这些读入的文字存入列表中,然后将此列表中的内容存入到
   'input.txt'中
 2.写程序,从上题的input.txt中读取之前输入的数据,读取到
   列表中,再加上行号进行输出

def read_input_txt():
    L = []
    while True:
        line = input('请输入一行文字')
        if not line:
            break
        L.append(line)
    return L
L = read_input_txt()
print(L)

def write_txt():
    try:
        f = open('input.txt','w')
        print("文件已创建")
        for x in L:
            f.write(x)
            f.write('\n')
        f.close()
        print("文件已关闭")
    except OSError:
        print("创建文件失败")

write_txt()

 # 2.写程序,从上题的input.txt中读取之前输入的数据,读取到
 #   列表中,再加上行号进行输出

def read_txt(filename='input.txt'):
    L1 = []
    try:
        fr = open('input.txt','rt')
        for line in fr:
            s = line.rstrip()
            L1.append(s)
        fr.close()
        print("读取文件成功!") 
    except OSError:
        print("打开文件失败!!")
    return L1
def print_text(L):
    for line_number,s in enumerate(L,1):
        print(line_number,':',s)


if __name__ == '__main__':
    print_text(read_txt())

标准输入输出文件:
  sys.stdin  标准输入文件(默认为键盘设备,得到原始键盘输出)
  ctrl + d 快捷键是让键盘输入文件结束符
  sys.stdout 标准输出文件(默认屏幕终端)
  sys.stderr 标准错误输出文件(默认为屏幕终端)
  模块名:  sys

  说明:
  1.标准文件不需要打开和关闭就可以使用
  2.每一个python程序启动后都会有三个文件供我们使用


示例:
 stdin.py


#此示例示意标准输入文件的用法

import sys
s = sys.stdin.readline()
print(s)  

sys.stdin.close()
#关闭标准输入文件则input函数就不能用了


s2 = input("请输入:")
print(s2)

  stdin2.py

import sys
s = sys.stdin.read()
print(s)  


二进制文件操作:(把文件当成字节串进行操作)
  模式字符:'b'
  默认文件中存储的都是以字节为单位的数据,通常有人为的格式
  对二进制文件的读写需要字节串(bytes)进行操作

常用操作方法:
 F.read([字符数/字节数])
 对文本文件,F.read()返回类型为字符串str
 对二进制文件,F.read()返回类型为字节串btyes
 F.write()
 同上,对于二进制文件,写入数据为字节串btyes或字节数组bytearray

F.tell()方法
  返回当前的文件流的读写位置(从0开始,以字节为单位)
#tell.py
#此示例示意tell方法的用法
f = open('20.txt','rb')  #二进制方式打开
b = f.read(3)
print(b)
#请问当前读写位置在哪儿?
pos = f.tell()   #返回读写位置
print("当前的读写位置:",pos) #3
b2 = f.read(1)
print("读一个字节后的读写位置是:",f.tell())   #4

f.close()


F.seek()方法
  对二进制文件有效,文本文件为按行读取
  作用:
  设置文件读写位置
  格式:
   F.seek(偏移量,whence=相对位置)
     偏移量
       大于0代表文件尾方向移动
       小于0代表文件头方向移动
     相对位置
        0代表从文件头开始偏移
        1代表从当前位置开始偏移 
        2代表从文件尾开始偏移
示例见:
seek.py


f = open('20.txt','rb')  #二进制方式打开
b = f.read(3)   #读取了三个字节
print(b)
f.seek(5,0)   #代表从文件头头向后移动5个字节
f.seek(2,1)  #代表从当前位置向后移动两个字节
f.seek(-15,2) #代表从文件尾向前移动15个字节
b = f.read(5)   #b'ABCDE'

f.close()


F.flush 
 作用:
   强制将缓冲区上的内容强制写到磁盘上


# flush.py

f = open('myflush.txt','w')
f.write('aaaa')

while True:
    f.write('aaaaaa'*100)
    time.sleep(1)
    print("写入一次")
s = input("请输如回车键继续:")

f.close()


汉字编码(两种)
问题:
  十个汉字占多少个字节?
  20个字节(GBK编码) 
  30个字节 (utf-8编码)

国标编码
 GB18030(二字节或四字节编码,27533个字)
   GBK(二字节编码 21003个字)
     GB2312(二字节编码 6763个字)
 (Windows上常用)

国际标准:
  UNICODE <----> UTF-8
(Linux / Mac OS x / IOS / Android常用)

UTF-8 (8-bit Unicode Transformation Format)


python的编码(encode)字符串
'gb2312'   6000 个字
'gbk'      21000 个字
'gb18030'  27000 个字
'utf-8'    前提文件为utf-8编码
'ascii'    英文


编码注释:
  在源文件中的第一行或第二行写入如下内容为编码注释

# -*- coding:gbk -*-
#设置源文件编码格式为:gbk

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


作用:
 告诉解释执行器,当前的.py文件的编码格式是什么

课后练习:
1.写程序,让用户输入一系列整数,当输入小于零的数时结束输入
  (1)将这些数字存于列表中
  (2)将列表中的数字写入到文件中numbers.txt
2.写程序,将上题的numbers.txt中的整数读入到内存中,形成列表,计算这些数中的最大值,最小值和他们的和

3.写程序,实现文件复制功能      
 要求:
 (1)要考虑关闭文件问题
 (2)要考虑超大文件复制问题
 (3)要能赋值二进制文件(如:/user/bin/python3等文件)
4.将学生信息管理程序添加两个功能:
 | 9) 保存信息到文件(si.txt)    |
 |10) 从文件中读取数据(si.txt)  |


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值