025 Python笔记--文件基本操作

一、创建和打开文件

1.打开文件

基本语法:file=open(filename[,mode][,buffering])

  • filename:要打开的文件路径即文件名称。如果要打开的文件和当前文件在同一个目录下,只写文件名即可,否则要写完整路径。
  • buffering:可选参数,用于指定读写的缓冲模式,值为0表示表达式不缓存;值为1表示表达式缓存;如果值大于1,表示缓冲区的大小。默认为缓存模式。
  • mode:可选参数,用于指定文件的打开模式,默认为只读(即r)。其参数值如下:
说明注释
r以只读的模式打开文件。文件的指针将会放在文件的开头文件必须存在
rb以二进制格式打开文件,并且采用只读模式。文件的指针将会放在文件的开头。一般用于非文本文件,如图片、声音等
r+打开文件后,可以读取文件内容,也可以写入新的内容覆盖原有内容(从文件开头进行覆盖)
rb+以二进制格式打开文件,并且采取读写模式。文件的指针将会放在文件的开头。一般用于非文本文件
w以只写模式打开文件文件存在,则将其覆盖,否则创建新文件
wb以二进制格式打开文件,并且采用只写模式。文件的指针将会放在文件的开头。一般用于非文本文件,如图片、声音等
w+打开文件后,先清空原有内容,然后对这个空文件进行读和写操作。
wb+以二进制格式打开文件,并且采取读写模式。文件的指针将会放在文件的开头。一般用于非文本文件
a以追加模式打开一个文件。如果该文件存在,将文件指针放在文件的末尾(将新的内容添加到已有内容之后),否则创建新文件用于写入 
ab以二进制格式打开文件,并且采用追加的模式。如果该文件已存在,文件指针将放在文件的末尾(将新的内容写入已有内容的后面),否则,创建新文件用于写入。 
a+以读写模式打开文件。如果该文件已存在,将文件指针放在文件的末尾。否则创建新文件用于写入。 
ab+以二进制格式打开文件,并采用追加模式。如果该文件已存在,将指针放在文件的末尾,否则,创建新文件用于写入。 

2.关闭文件:file.close()

3.打开文件时使用with语句

基本语法:

with open(filename[,mode][,buffering]) as file:

with_body

对文件操作完之后要及时将文件关闭。但是如果在打开文件的过程中出现了异常,将导致文件不能正常关闭。为了避免此类问题的发生,可以使用python提供的with语句。从而实现在处理文件时,无论是否抛出异常,都能保证with语句执行完毕后关闭文件。

4.打开文件以指定的编码方式:file=open(filename,encoding='utf-8')

二、对文件中内容的读取和写入

文件对象方法执行操作
file.read([size=-1])从文件中读取size个字符,当为给定size或size为负数时,读取剩下的所有字符,然后作为字符串返回。
file.readline()读取一行
file.readlines()读取全部行,返回一个字符串列表
file.write(string)将字符串string写入文件。
file.writelines(seq)向文件中写入字符串序列seq。
file.seek(offset[,from])在文件中移动文件指针,从from(0表示文件的起始位置,1表示文件的当前位置,2表示文件末尾),偏移offset个字节。
file.tell()返回当前在文件指针在文件中的位置

1.读取文件内容:read(),readline(),readlines()

  1.1读取指定个数的字符:file.read()

#文件中的内容:Python is my favorite progrmming language!
with open('csdn.txt','r',encoding='utf-8') as file:
    str1=file.read(8)
    str2=file.read() #默认读取所有剩余的字符
    print(str1)
    print(str2)

#运行结果
Python i
s my favorite progrmming language!

注:使用read(size)方法读取文件时,是从文件开头读取的。如果想要读取部分内容,可以使用文件对象的seek()方法将文件指针移动到新的位置,然后再用read(size)方法读取。

  1.2将文件的指针移动到新的位置:file.seek(offset[,from])。

对于from参数,如果在打开文件时,没有使用b模式(即rb),那么只允许从文件头开始计算相对位置。否则就会引发异常。

with open('csdn.txt','r',encoding='utf-8') as file:
    file.seek(5)
    print("文件指针的当前位置:",file.tell())#返回文件指针的当前位置
    message=file.read(9)
    print(message)

#运行结果
文件指针的当前位置: 5
n is my f

  1.3读取一行:file.readline()

'''文件中的内容:
Python is my favorite progrmming language!
You are my baby!
Beauty and beat
'''
with open('csdn.txt','r',encoding='utf-8') as file:
    num=0
    while True:
        num+=1
        line=file.readline()
        if line=='':
            break
        print('第'+str(num)+'行:',line,end='')
        
#运行结果
第1行: Python is my favorite progrmming language!
第2行: You are my baby!
第3行: Beauty and beat

  1.4读取全部行:file.readlines()

with open('csdn.txt','r',encoding='utf-8') as file:
    message=file.readlines()#读取文件中的全部行,返回一个列表。
    print('输出message:',message)
    #当执行完上面的语句之后,文件指针已经在文件的最后
    print('此时文件的指针在:',file.tell())
    #要想直接从文件中读取内容,需要移动文件的指针位置
    file.seek(0)
    for item in file:
        print(item,end='')

#运行结果
输出message: ['Python is my favorite progrmming language!\n', 'You are my baby!\n', 'Beauty and beat']
此时文件的指针在: 77
Python is my favorite progrmming language!
You are my baby!
Beauty and beat

  1.5写入文件:file.write(str),file.writelines(seq)

with open('csdn.txt','w',encoding='utf-8') as file:
    message='''如果说你是海上的烟火
我是浪花的泡沫
某一刻,你的光照亮了我
'''
    file.write(message)   #write()的参数只能是字符串。
    file.writelines(message)
    list1=['哈哈哈\n','呵呵呵\n','哦哦哦']
    file.writelines(list1)

#运行结果,写入文件中的内容如下:
'''
如果说你是海上的烟火
我是浪花的泡沫
某一刻,你的光照亮了我
如果说你是海上的烟火
我是浪花的泡沫
某一刻,你的光照亮了我
哈哈哈
呵呵呵
哦哦哦
'''

注:file.seek()使用注意:先看下面两个例子:

#示例1
with open('csdn.txt','w') as file:   #默认以GBK的格式打开文件
    file.write('Python是我最喜欢的编程语言。')

with open('csdn.txt','r') as file:
    file.seek(12)        #文件指针向后移动12个字节
    string1=file.read(3)
    print(string1)
    
#运行结果
喜欢的

#示例2
with open('csdn.txt','w',encoding='utf-8') as file:   #以utf-8的格式打开文件
    file.write('Python是我最喜欢的编程语言。')

with open('csdn.txt','r',encoding='utf-8') as file:
    file.seek(12)        #文件指针向后移动12个字节
    string1=file.read(3)
    print(string1)
    
#运行结果
最喜欢

file.seek(size)中的size是以字节为单位的。如果文件是以GBK进行编码的,则文件中的每个汉字以及每个汉字标点都是占2个字节的;若文件是以utf-8的形式进行编码,则文件中的每个汉字及每个汉字标点都是占3个字节。这些编码的每个英文字母及英文标点都是占1个字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值