zoukankan      html  css  js  c++  java
  • Python基础06 文件基本操作

    Python文件基本操作

    1、文件对象的属性

    属性 描述
    file.closed 如果文件已被关闭返回true,否则返回false。
    file.mode 返回被打开文件的访问模式。
    file.name 返回文件的名称。
    file.newlines 未读取到行分隔符时为 None , 只有一种行分隔符时为一个字符串, 当 文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束 符的列表
    file.encoding 返回文件的编码方式
    file = open('allen.txt', 'w')
    print(file.name)
    print(file.mode)
    print(file.encoding)
    print(file.newlines)
    
    输出结果:
    allen.txt
    w
    UTF-8
    None
    

    2、文件的打开

    文件打开是通过内置函数open(),并返回一个文件对象,

    file object = open(file_name [, access_mode][, buffering])
    
    
    • file_name: file_name变量是一个包含了你要访问的文件名称的字符串值。比如:‘hello.text’

    • access_mode:访问文件的模式,只读(r),写入(w),追加(a)等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。

    • buffering:值为0,访问文件时不寄存行。值为1,访问文件时寄存行。值为大于1的正数表示指定寄存区缓冲大小。值为负数时表示寄存区缓冲大小为系统默认。

    一表胜十文:

    模式 描述
    r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式.
    rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
    r+ 以读写方式打开文件,文件的指针在文件的开头
    rb+ 以二进制格式打开一个文件可以用于读写,文件指针放在开头。一般用于非文本文件如图片等。
    w 以只写方式打开文件,文件的指针在文件的开头,如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    wb 以二进制格式打开一个文件用于只写,文件的指针在文件的开头。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
    w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
    a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。r+
    a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
    一图胜十表:
    模式 r r+ w w+ a a+
    ✔️ ✔️ ✔️ ✔️
    ✔️ ✔️ ✔️ ✔️ ✔️
    创建 ✔️ ✔️ ✔️ ✔️
    覆盖 ✔️ ✔️
    指针在开始 ✔️ ✔️ ✔️ ✔️
    指针在结尾 ✔️ ✔️

    3、文件输入

    文件的输入和输出是相对应屏幕来说,从读取文件内容到屏幕上叫输入,将屏幕上内容写到文件内叫输出

    3.1 read(size):

    用于从文件读取指定的字节数,size:从文件中读取的字节数。如果size未给定或为负则读取所有
    allen.txt文件内容

    line1
    line2
    line3
    
    file = open('allen.txt', 'r')
    cont1 = file.read(2)
    cont2 = file.read(10)
    cont3 = file.read(15)
    print('cont1=%s' % cont1)
    print('cont2=%s' % cont2)
    print('cont3=%s' % cont3)
    file.close()
    
    结果:
    cont1=li
    
    cont2=ne1
    line2
    
    cont3=line3
    
    

    从结果上看,使用同一个file读取多次时,指针的位置从上一次读取的最后位置的下一个位置开始读取的。

    3.2 readline()

    用于从文件读取整行,包括 " " 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 " " 字符。

    fo = open("allen.txt", "r+")
    print("文件名为: ", fo.name)
    
    line = fo.readline()
    print("读取第一行 %s" % line)
    
    line = fo.readline(5)
    print("读取的字符串为: %s" % line)
    fo.close()
    

    结果:

    文件名为:  allen.txt
    读取第一行 line1
    读取的字符串为: line2
    

    3.3 readlines()

    用于读取剩余未读取的所有行(直到结束符 EOF)并返回列表,而不是所有行,如果碰到结束符 EOF 则返回空字符串。

    fo = open("allen.txt", "r+")
    print("文件名为: ", fo.name)
    line = fo.readlines(1)
    print("读取第一行 %s" % line)
    line = fo.readlines()
    print("读取剩余行: %s" % line)
    fo.close()
    

    结果:

    文件名为:  allen.txt
    读取第一行 ['line1
    ']
    读取剩余行: ['line2
    ', 'line3']
    

    使用for循环
    例子1:

    fo = open('allen.txt', 'r')
    for line in fo.readlines():
        print(line)
    fo.closed
    

    结果:

    line1
    
    line2
    
    line3
    

    例子2:

    fo = open('allen.txt', 'r')
    for line in fo.readlines():
        print(line.strip())
    fo.closed
    

    再来看加上strip()后的结果

    line1
    line2
    line3
    

    从以上两个例子中可以看出,readlines()读取的时候将换行符 也一块读取出来,需要我们自己去掉,其实read()、readline()也是一样

    4、文件输出

    4.1 write()

    向文件中写入指定字符串。

    import os
    
    fo = open('allen.txt', 'w+')
    while True:
        line = input('input content')  # input不会保留换行符,需要自己加上系统的换行符
        if line != '.':
            fo.write('%s%s' % (line, os.linesep))
        else:
            break
    for line in fo.readlines():
        print(line)
    fo.close()
    

    如果我们分别输入3行:

    line4
    line5
    line6
    

    本来我们“allen.txt”文件中有以下三行:

    line1
    line2
    line3
    

    加上我们输入的3行应该是

    line1
    line2
    line3
    line4
    line5
    line6
    

    运行结果:

    line4
    line5
    line6
    

    但结果并不是啊,原因是什么呢?还有为什么我们要加上os.linesep()

    需要注意点:
    1、以‘w/w+’模式打开的文件,如果文件存在则会覆盖,如果文件不存在则会新建。
    2、write()和read()一样并不会操作换行符,需要使用os模块下os.linesep()加上换行符,否则只会在一行上写

    4.2 writelines()

    向文件中写入一序列的字符串。
    这一序列字符串可以是由迭代对象产生的,如一个字符串列表。
    换行需要制定换行符 。

    fo = open('allen.txt', 'w+')
    while True:
        line = input('input content')  # input不会保留换行符,需要自己加上系统的换行符
        if line != '.':
            fo.writeline('%s%s' % (line, os.linesep))
        else:
            break
    for line in fo.readlines():
        print(line)
    fo.close()
    
    

    我们输入3行

    line1
    line2
    line3
    

    打开文件查看结果:

    line1
    line2
    line3
    

    5、文件定位移动

    5.1 tell()

    例子1:

    fo = open('allen.txt', 'r')
    for line in fo.readline():
        print('本行内容:%s,指针所在的位置:%d' % (line, fo.tell()))
    fo.close()
    
    本行内容:line1,指针所在的位置:6
    本行内容:line2,指针所在的位置:12
    本行内容:line3,指针所在的位置:18
    

    例子2:

    fo = open('allen.txt', 'r')
    for line in fo.readlines():
        print('本行内容:%s,指针所在的位置:%d' % (line, fo.tell()))
    fo.close()
    
    本行内容:line1,指针所在的位置:18
    本行内容:line2,指针所在的位置:18
    本行内容:line3,指针所在的位置:18
    

    从例子1和2中我们可以看出readline()读取一行,指针的位置移动一行,readlines()是一下子读取到尾部。

    5.2 seek()

    seek(offset[, whence]) :没有返回值
    offset -- 偏移量,也就是代表需要移动字节数
    whence:可选,默认值为 0。表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起

    fo = open("allen.txt", "r+")
    line = fo.readline()
    print("第一次读取的数据为:%s所在的位置为:%d " % (line, fo.tell()))
    # 重新设置文件读取指针到开头
    fo.seek(0, 0)
    line = fo.readline()
    print("第二次读取的数据为:%s所在的位置为:%d " % (line, fo.tell()))
    fo.closed
    
    第一次读取的数据为:line1所在的位置为:6 
    第二次读取的数据为:line1所在的位置为:6 
    

    6、文件迭代

    file对象是一个可迭代的对象,可以使用for循环进行迭代

    fo = open("allen.txt", "r")
    for content in fo:
        print(content)
    fo.close()
    
    line1
    
    line2
    
    line3
    
    

    内功深厚的同学,应该发现了一个问题,上边所有的例子我们再关闭文件的时候都是直接close(),试想一下,万一中间出现异常了,close就执行不了,为了保证无论是否出错都能正确地关闭文件,我们可以使用 try ... finally :

    try:
        f = open('allen.txt', 'r')
        print f.read()
    finally:
        if f:
            f.close()
    

    但是每次都这么写实在太繁琐,所以,Python 引入了 with 语句来自动帮我们调用 close() 方法:

    with open('allen.txt', 'r') as f:
    	f.read()
    

    是不是很简洁,有木有

  • 相关阅读:
    Jmeter环境搭建
    python基础(四)
    python基础(三)
    python基础(二)
    python基础(一)
    jmeter压测、操作数据库、分布式linux下运行、webservice接口测试、charles抓包
    接口测试及其工具简单使用
    Linux安装jdk
    使用loadrunner监控apcahe
    LoadRunner监控Linux
  • 原文地址:https://www.cnblogs.com/suxianglun/p/9052718.html
Copyright © 2011-2022 走看看