一、创建和打开文件
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个字节。