open()函数
简介
预想操作python中的文件(打开/创建/追加),必须使用python的内置函数:open()
open函数常用参数有两个:
第一个实参,是文件的所在路径(若文件在python中,则写文件名称即可,若文件在电脑中,则需要填写文件的绝对路径,且字符需要转义)
第二个实参,决定了打开文件的模式:只读,写入,追加等。常用的包括r,w,a,+,b(后边详细介绍每个字符的含义),如果不传参,默认使用r的方式
文件操作三步骤:
1、打开open()
2、操作read()、write()、seek()
3、关闭close()
语法
file = open('filename','mode',encoding='utf-8')
print(file.read())
file.close
实例
file = open('C:Users\User\Desktop\hello.txt','a+',encoding='utf-8') # 追加读写模式,使用a+
file.write('hello 123')# 追加写内容,使用write()方法
file.seek(0) # 移动指针位置,使用seek()方法
print(file.read()) # 读文件,使用read()方法
file.close # 关闭文件,使用close()方法
不同模式打开文件的含义
b 二进制模式,以二进制格式打开或写入,一般用于打开非文本文件,如图片,可与r,w,a,+共同使用,如:rb,rb+,wb,wb+,ab,ab+
+ 打开一个文件进行更新(可读可写),可与r,w,a共同使用,如:r+,w+,a+
r 读模式,只能读不能写。这是默认模式,打开不存在的文件会报错
r+ 读写模式,文件指针将会放在文件的开头,打开不存在的文件会报错
w 写模式,只能写不能读。如果该文件已存在,会把原有文件中的数据覆盖,打开不存在的文件会创建。
w+ 读写模式,如果该文件已存在,会把原有文件中的数据覆盖,打开不存在的文件会创建。
a 追加模式,打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 追加读写模式,打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
模式 | r | r+ | w | w+ | a | a+ |
读 |
√ |
√ |
|
√ |
|
√ |
写 |
|
√ |
√ |
√ |
√ |
√ |
创建 |
|
|
√ |
√ |
√ |
√ |
覆盖 |
|
|
√ |
√ |
|
|
指针在开始 |
√ |
√ |
√ |
√ |
|
|
指针在结尾 |
|
|
|
|
√ |
√ |
read()方法--读
file = open('C:Users\User\Desktop\hello.txt','r',encoding='utf-8')
print(file.read()) # 读取文件中的所有内容
file.seek(0)
print(file.readline()) # 按行读取文件中的内容,读取时占用内存小,比较适合大文件
file.seek(0)
print(file.readlines()) # 读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素,但读取大文件会比较占内存
print(file.readable()) # 如果文件是可读的,返回 True,否则返回 False
file.close
write()方法--写
file = open('C:Users\User\Desktop\hello.txt','a+',encoding='utf-8')
file.write('123
') # write()的参数是一个字符串
file.writelines(['456
','456
']) # writelines()的参数可以是一个字符串,也可以是一个列表
file.seek(0)
print(file.read())
print(file.writable()) # 如果文件是可写的,返回True,否则返回Flase
循环文件
# 循环取值
file = open('test.txt',encoding='utf-8') # 打开文件,默认是使用r读模式
for line in file:
print(line)
# 循环写入
l = ['haha','heihei','hehe','lala']
for i in l:
f = open('input.txt', 'w+', encoding='utf-8')
f.write(i)
f.seek(0)
print(f.read())
f.close()
# 循环写入
l = ['a', 'b', 'c', 'd', 'e']
f = open('wxy.txt', 'w', encoding='utf-8') # 打开一个文件向里边写入
for i in l: # 循环list
f.write(i + '
') # 每循环一次,写入一个值,如果想换行,就在后面加
f.writelines(l) # 传一个list的话,它会帮你循环,把list中的每个元素都写到文件里面,该方法和上边循环的效果一样
f.close()
f1 = open('wxy.txt', 'r', encoding='utf-8')
print(f1.read()) # 读取这个文件中的值
f1.close()
replace()方法--替换
练习:把test文件中的xiaolan改成dalan
test文件中内容:
xiaohei
xiaobai
xiaolan
xiaohong
# 写法1,
# 思路:1、读取内容 2、替换 3、清除原来文件的内容 4、把新的内容写进去
file = open('test','a+',encoding='utf-8')
file.seek(0) # 移动指针位置
result = file.read() #将读取的文件,赋值给result
content = result.replace('xiaolan','dalan') # 将result中替换后的信息,赋值给content
file.truncate(0) # 清空原有文件
file.write(content) # 将替换后的内容写入到file中
file.seek(0)
print(file.read()) # 读取文件
file.close()
# 写法2,大文件用这种方式处理
# 思路:1、逐行处理 2、打开a(要修改的文件)文件,在打开b(空文件)文件
# 3、从a文件中读一行,修改,修改之后写到b文件中 4、删除a文件,把b文件的名字改成a文件
f = open('test.txt',encoding='utf-8') # 打开文件,默认是使用r读模式
f2 = open('test1.txt','a+',encoding='utf-8') # w模式,打开不存在的文件会创建
for line in f:
result = line.replace('xiaolan','dalan')# 替换文件内容
# result = line.upper() # 把文件内容转换为大写字母
f2.write(result)
f2.seek(0)
print(f2.read())
f.close()
f2.close()
import os
os.remove('test.txt') # 将test.txt文件删除
os.rename('test1.txt','test.txt') # 将test1.txt重命名为test.txt