python_文件

文件 file
    什么是文件:
        1、文件是数据存储的单位
        2、文件通常用来长期存储数据
        3、文件中的数据是以字节为单位进行顺序存储的

 文件的操作流程:
        1、打开文件
        2、读写文件
        3、关闭文件
    任何的操作系统,一个应用程序同时打开文件的数量是有最大数限制的
    文件的打开函数 open
        open(file,mode=‘rt’,[encoding='utf-8'])用于打开一个文件,返回此文件对应的文件流对象,如果打开失败,则会触发OSError错误!,

    说明:如果不指定编码格式则默认打开的是操作系统默认的编码格式
    文件关闭方法:
        F.close()关闭,释放系统资源

 python文件读写的类型有两种:
        1、文本文件(text file)
        2、二进制文件(binary file)

 文本文件的操作
        默认文件中存储的都为字符数据,以行为单位进行分割,在pythonn内部统一用‘\n’作为换行符进行分割
        文本文件读写需要用字符串(str)进行数据读取和写入
    各种操作系统的换行符:
        Linux换行符 :“\n”
        Windows换行符:“\r\n”
        旧的Macintosh:“\r”
        新的Mac OS换行:“\n”
    文件中常用的方法:
        f.close()                          文件关闭(关闭后文件不能再读写,否则会发生ValueError错误)
        f.readline()                   读取一行数据,如果到达文件尾则返回空行,返回的是数据结尾会有一个“\n”符号

try:
    f = open("info.txt")
    while True:
        s = f.readline()
        if s == '':
            break
        if s[-1] == "\n":#此处解决双换行
            print(">>>",s[:-1])
        else:
            print(">>>",s)#最后一行没有“\n”符号
except OSError:
    print("打开文件失败!")

        f.readlines(max_chars=-1)  返回每行字符串的列表,max_chars为最大字符串(或字节数)

   f.read(size=-1)                从一个文件中最多读取size的字符,不管是1个中文还是1个字母都代表1
        f.writelines(lines)             每行字符串的列表,没有返回值

f = open("mynote.txt","w")
L = ["我是第一行\n","我是第二行"]#列表的每个元素后面要加\n换行符
f.writelines(L)
f.close()

   f.write(text)         写一个字符串到文件流中,返回写入的字符数

f = open("mynote.txt","w")
a = f.write("hello")#把字符串写入文件的同时返回一个int类型的数,次数代表字符串的长度
print(type(a),a) # <class 'int'> 5
f.close()

     f.flush()                      把写入文件对象的缓存内容写入到磁盘,没有参数

import time
f = open("abc.txt","w")
f.write("hello")#先把文字个缓冲区,当数据大于4096个字节时,才会写入磁盘中,或则文件关闭时写入
print("程序开始睡觉")#f.flush("hello")是直接将数据写入到磁盘中的
time.sleep(5)
print("程序睡醒了") 
f.close()
View Code

mode 模式字符的含义
        "r"        以只读方式打开(默认)
        "w"        以只写方式打开,删除原有文件内容,如果文件不存在,则创建
        "x"        创建一个新文件,并以写模式打开这个文件,如果文件存在,则产生”FileExistsError“错误
        "a"        以只写方式打开一个文件,如果有原文件则追加文件末尾
        "b"        用二进制模式打开
        "t"        文本文件模式打开(默认)
        "+"        为更新内容打开一个磁盘文件(可读可写)

   "a"        以只写方式打开一个文件,如果有原文件则追加文件末尾
        "b"        用二进制模式打开
        "t"        文本文件模式打开(默认)
        "+"        为更新内容打开一个磁盘文件(可读可写)
        "rt或tr"  缺省模式
        "w+b"   可以实现二进制随机读写,当打开文件时,文件内容将被清空
        "r+b"    以二进制读和更新模式打开文件,打开文件时不会清空文件内容
        "r+"      以文本读和更新模式打开文件,打开文件时不会清空文件内容

  文本文件的迭代读取:
          open()函数返回来的文件流对象是可迭代对象

f = open("abc.txt")#f是一个可迭代对象,可以使用iter()和next()函数读取数据
for line in f:#每次读取一行,相当于line = f.readline()
    print(line)
f.close()

  标准输入输出文件:
      模块名:sys
        sys.stdin        (默认为标准键盘输入设备)
            ctrl +d 输入文件末尾标识符(linux和苹果系统下)

import sys
s = sys.stdin.readline()
print("从键盘读取的第一行是:",s)
s = sys.stdin.read()#Ctrl+d是文件末尾的标识符,不会读取第一行的数据,因为被readline读取过了
print("read读取的信息是",s)
s = sys.stdin.readlines()
print("readlines读取的信息是:",s)
print("程序退出")

        sys.stdout        (默认为屏幕终端)
        sys.stderr        (默认为屏幕终端)
   标准文件不需要打开和关闭就可以使用

import sys
a = sys.stdout.write("hello\n")
print(type(a),a)#<class 'int'> 6
b = sys.stdout.write("Error\n")
print(type(b),b)#<class 'int'> 6

   二进制文件操作:
          "b"        二进制(binary)文件操作
          对于二进制文件的读写通常需要用字节串(bytes)进行操作,在二进制读写操作时,一般用read和write方法

try:#文件内容为:hello中文
    f = open("abc.txt","rb")#以二进制模式打开文件
    b = f.read(5) #5代表5个字节,读取二进制文件通常用read()读取
    print(b)#b'hello'
    b =f.read(3)
    print(b)#b'\xe4\xb8\xad'代表中字的前两个字节
    b = f.read()
    print(b)#b'\xe6\x96\x87',代表中的最后一个字节和文的三个字节
    print("读取的内容转为文字后:",b.decode("utf8"))#文,请读取的二进制字节串转为字符串
    f.close()
except OSError:
    print("文件打开失败")
View Code

  二进制文件操作方法:
          f.tell()                        返回当前文件流的绝对位置
          f.seek(offset,whence=0)       改变数据流的位置,返回新的绝对位置
          f.readable()                判断这个文件是否可读,可读返回True,否则返回False
          f.writebale()                判断这个文件是否可写,可写返回True,否则返回False
          f.seekable()                返回这个文件对象是否支持随机定位
          f.truncate(pos=None)    减掉自pos位置之后的数据,返回新的文件的长度(字节为单位)
          f.seek(偏移量,whence=相对位置)
              偏移量:
                  1、大于0代表向文件末尾方向移动
                  2、小于0代表向文件头方向移动
              相对位置:
                  0代表从文件头开始
                  1代表从当前读写位置开始偏移
                  2代表从文件尾开始偏移

  问题:十个汉字占多少字节?
    答案:GBK占20个字节,UTF-8占30个字节
    汉字编码:
        国标系列:(Windows中常用)
            GB18030(二字节或四字节编码)
                GBK(二字节编码)
                    GB2312(二字节编码)
        国际标准:(Linux、Mac OS X 、IOS、Android常用)
            Unicode(2/4字节)
            UTF-8(1-6字节)
    python 编码(encode)字符串
        "gb2312"
        "gbk"
        "gb18030"
        "utf-8"
        "ascii"
        ...
        编码注释:
            在源文件的第一行或第二行写入如下内容为编码注释
            # -*- coding:gbk -*-
            #设置原文件编码为:gbk
            或:
            # -*- coding:utf-8 -*-
            设置源文件编码为:utf-8

 


       

 

posted @ 2018-07-21 01:14  xdl_smile  阅读(235)  评论(0编辑  收藏  举报