Python基础 文件的读写

    科技2022-07-10  108

    文件的读取——open

    打开文件需要三步:打开 -> 操作 -> 关闭 同时,打开文件时,需要注意文件路径可能有转义字符的情况:

    #注意文件路径可能有转义字符的情况,如以下写法,会报错 file1 = open('d:\note1.txt') #有转义字符\n,会报错,提示Invalid argument #解决方法1:多加一个\ file1 = open('d:\\note1.txt') #解决方法2:用/替换\ file1 = open('d:/note1.txt') #解决方法3:前方加一个r,让后方的转义字符都不生效 file1 = open(r'd:\note1.txt') #关闭文件 file1.close()

    判断文件对象拥有的权限

    file = open("d:/note1.txt") print(file.readable())#判断是否拥有可读权限 True or False print(file.writable())#判断是否拥有可写权限

    文件定位 tell()方法:可获取文件的当前位置 seek(m,n)方法:可改变当前文件的位置 ——m表示偏移量,>0代表向右移动,<0代表向左移动 ——n指定开始移动字节的参考位置(参数为1或2时,只有在rb[二进制]模式下才生效) 0:移动指针位置到文件开头 1:不移动指针,使用当前位置作为参考位置 2:移动指针到末尾

    file1 = open('d:/note1.txt','rb')#文件中共有10个字符(0-9) print(file1.tell())#输出:0,打印指针的位置,在第0位 file1.seek(6,0)#表示从文件开头,向右偏移6位 print(file1.tell())#输出:6 file1.seek(2,1)#表示从指针当前位置,向右偏移两位 print(file1.tell())#输出:8 file1.seek(-1,2)#表示从文件末尾,向左偏移1位 print(file1.tell())#输出:9

    文件读写模式:

    r为读取模式,w为写入模式,a为追加模式,不能同时进行读和写

    r模式 ——r模式为默认模式 ——只能读,不能写 ——若读取的文件不存在,则报错

    #读取模式r,若读取的文件不存在,则报错 file1 = open('d:/note1.txt')#不加读写模式的参数,则默认为读取模式 file2 = open('d:/note1.txt','r')#r为读取模式,只能读,不能写 print(file2.readable())#输出:True print(file2.writable())#输出:False print(file2.read())#读取文件内容,并打印出来 file2.close()

    w模式 ——只可写,不可读 ——会清空文件之前的内容 ——若文件不存在,会创建新文件并写入

    #写入模式w,若写入的文件不存在,会自动创建一个文件,不会进行报错 file1 = open('d:/note1.txt','w')#w为写入模式,只能写入,不能读取,且为清空后重新写入 print(file1.readable())#输出:False print(file1.writable())#输出:True file1.write('hello') file1.close()

    a模式 ——只可写 ——追加写入,不会清空文件之前内容 ——若文件不存在,会创建新文件并写入

    #追加模式a,若写入的文件不存在,会自动创建一个文件,不会进行报错 file1 = open('d:/note1.txt','a')#a为追加写入模式,不会清空之前文件内的内容 print(file1.readable())#输出:False print(file1.writable())#输出:True file1.write('world') file1.close()

    当需要同时进行读取和写入时,可以使用r+、w+、a+

    r+模式 ——可读,可写 ——若文件不存在,则报错 ——默认情况下,从文件所在指针位置开始写入

    #r+从当前位置开始写入,若后面有内容,则进行覆盖,但不会全部清空 file1 = open('d:/note1.txt','r+') file1.write('my name is Jewel') print(file1.tell())#打印指针位置,输出16 file1.seek(0)#使指针位置回到第0位 print(file1.read())#输出:my name is Jewel,若seek(0)不写,则读取不到任何内容 print(file1.tell())#输出:16,读取后,指针位置又到了16 file1.seek(0) file1.write('花花')#从指针所在位置开始写入 print(file1.tell())#打印指针位置,输出4,一个汉字占两个字节 file1.seek(0) print(file1.read())#输出:花花ame is Jewel file1.close()

    w+模式 ——可读,可写 ——会清空文件之前的内容 ——若文件不存在,会创建新文件并写入

    file1 = open('d:/note1.txt','w+') file1.write('ABCDE') file1.seek(0) print(file1.read())#输出:ABCDE

    a+模式 —— 可读,可写 ——文件不存在,不报错 ——不会清空文件内容,从末尾进行追加写入

    file1 = open('d:/note1.txt','a+')#原文件有5个字符,ABCDE print(file1.tell())#输出:5 file1.seek(0)#将指针移至开头 file1.write('12345')#写入新的内容 file1.seek(0)#将指针移至开头 print(file1.read())#输出:ABCDE12345

    with open

    with open方法,要注意缩进,可以不用写close()方法,其他与open方法用法基本一致

    with open('d:/note1.txt','w+') as file1: file1.write('ABCDE') file1.seek(0) print(file1.read())#输出:ABCDE

    with open方法可以同时打开多个文件

    with open('d:/note1.txt','w+') as file1,open('d:/note2.txt','w+') as file2: file1.write('ABCDE') file1.seek(0) file2.write('12345') file2.seek(0) print(file1.read())#输出:ABCDE print(file2.read())#输出:12345

    read()、readline()、readlines()的不同用法: ——read()读取文件全部内容 ——readline()读取一行内容,可以加一个参数,表示读取几个字符 ——readlines()读取整个文件,返回值是一个列表,每个元素是一行

    #向目标文件写入多行数据 with open('d:/note1.txt','w+') as file1: file1.write('''ABCDE 12345 abcde 54321''') file1.seek(0) print(file1.read())#输出:按格式输出文本全部内容 file1.seek(0) print(file1.readline(2))#输出:AB file1.seek(0) print(file1.readlines())#以列表形式输出 #['ABCDE\n', '12345\n', 'abcde\n', '54321']
    Processed: 0.016, SQL: 8