python之文件的读写操作

  • 文件 file

    什么是文件

        文件是用于数据存储的单位

        文件通常用来长期存储数据

        文件中的数据是以字节(byte)为单位进行存储的

    文件的操作流程:

        1.打开文件

        2.读/写文件

        3.关闭文件

        注:任何操作系统,一个应用程序同时打开文件的数量有最大数限制

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

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

    示例;
        

#此示例示意文件的打开和关闭及读取文本信息的操作
try:
    # f = open('myfile.txt')  #打开文件
    f = open('/home/tarena/桌面/python笔记/code/myfile.txt')
    print('文件打开成功')


    #读写文件
    s = f.readline() #读取一行   s = 'abcd\n'
    print('len(s)',len(s),'内容是:',s)
    s = f.readline() #再读取一行
    print('len(s)',len(s),'内容是:',s)
    s = f.readline()  #对第三行
    print('len(s)',len(s),'内容是:',s)

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

 文本文件的操作:
        文本文件的模式字符't'
        说明:
            对文本文件的读写需要用字符串str进行读取和写入数据

        默认文件中存储的都是字符(文字)数据,在读写中会自动进行编码转换操作
        以行为单位分隔,在python内统一用'\n'作用用换行符进行分隔

    各操作系统的换行符:
        linux 换行符                         '\n'
        window 换行符                   '\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')
        print('打开文件成功')

        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() 
        print('文件关闭')
        return rl      
    except OSError:
        print('读取文件失败!')


def print_info(l):
    for d in l:
        print(d["name"],'今年',d['age'],'岁,成绩是:',d['score'])
l = read_info_txt()
print_info(l)


    文本文件读方法:
        f.readline()
        f.readlines()
        f.read(字符数或字节数)
    文本文件的写方法:
        模式字符串:'w''x''a'
        f.write(字符串)
        f.writlines(字符串列表)

    示例:


# f = open('newfile') 
#默认是不写第二个参数默认是:f = open('newfile','rt')
try:
    # f = open('newfile.txt','wt')  #失败抛出异常错误通知

    f = open("newfile.txt",'w')
    # f = open("newfile.txt",'x')   #如果原文件存在则报错
    # f = open("newfile.txt",'a')   #追加
    print('打开成功')

    #在此处进行写文件的操作
    f.write('hello')
    f.write('world')
    f.writelines(['123','abc'])




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

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

    示例:

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

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

def input_txt():
    l = []
    while True:
        i = input("请输入:")
        if i == '':
            break
        l.append(i)
    return l

def list_to_file(lst,filename = 'input.txt'):
    '''将字符串的列表,保存在filename文件中'''
    try:
        fw = open(filename,"w")
        for i in lst:
            #把s绑定的字符串写入到input.txt中
            fw.write(i)
            fw.write('\n')#写入换行符 来区分行
        fw.close()
    except OSError:
        print("写入文件失败")

l = input_txt()
list_to_file(l)

def read_from_file(filename = 'input.txt'):
    l = []
    try:
        fr = open(filename,'rt')
        for line in fr:
            s = line.rsplit()  #去掉右边的换行符
            l.append(s)
        fr.close()
        print('读取文件成功')

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

def print_text(lst):
    for line_numble,s in enumerate(lst,1):
        print(line_numble,":",s)

if __name__ == "__main__":
    print_text(read_from_file())

标准输入输出文件:
    sys.stdin   标准输入文件 (默认为键盘设备)
    sys.stdoutt 标准输出文件(默认为屏幕终端)
    sys.stderr 标准错误输出文件(默认为屏幕终端)

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

    示例:

import sys
# ctrl + d 快捷键让键盘输入标准结束符
s = sys.stdin.read()
print(s)

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

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


二进制文件操作:
    模式字符: 'b' 
    默认文件中存储的都是以字节为单位的数据,通常有人为的格式
    对二进制文件的读写需要用字节串(bytes)进行操作
常用的操作方法:
    f.read([字节数/字符数])
        对于文本文件,f.read()返回类型为字符串str
        对于二进制文件,f.read()返回类型为字节串bytes
    f.write()
    同上,对二进制文件,写入的数据为字节串或字节数组


    f.tell()方法
        返回当前的文件流的读写位置(从0开始,以字节为单位)


    f.seek方法
        作用:
            设置文件的读写位置
        格式:
            f.seek(偏移量,whence = 相对位置)
            偏移量
                大于0代表向文件尾方向移动
                小于0代表向文件头方向移动
            相对位置:
                0代表从文件头开始偏移
                1代表从当前位置开始偏移
                2代表从文件尾开始偏移
    示例:

f = open('20.txt','rb')
b = f.read(3)

print(b)
pos = f.tell() #返回读写位置
print('当前的读写位置是:',pos)

b2 = f.read(1)
print('读一个字节后的读写位置是:',f.tell())

# f.seek(5,0)  #代表从文件头向后移动5个字节
# f.seek(2,1) #代表从当前位置向后移动2个字节
f.seek(-15,2) #代表从文件尾向前移动15个字节
b = f.read(10)
print(b)



f.close()

猜你喜欢

转载自blog.csdn.net/zhangshuaijun123/article/details/81938378