在python中读取文件
open('文件名','打开文件的模式',encoding="utf-8") # 普通文本文件TXT
如果被打开的文件和当前文件在同一路径下,可以直接写相对路径即文件名
如果被打开的文件和当前文件不在同一路径下,需要写绝对路径即文件完整的路径(此时注意绝对路径内可能含有转义符,需要使用r关闭转义)
文件名和打开文件的模式需要加引号,encoding='utf-8'可省略,省略时默认按gbk编码解码,这样可能会报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x9f in position 11: incomplete multibyte sequence,报错就需要使用encoding='utf-8'使用utf-8编码格式去进行解码
.read() r读取文件内所有内容,如果文件不存在则会报错
.close() 关闭文件
f=open('test0515.txt','r',encoding='utf-8') # mode='r',只读模式;打开文件;
content = f.read() # 读取内容
print(content)
f.close() # 关闭文件,如果不关闭会把读取出来的内容暂时缓存到内存里占用空间
# 挑战年薪30W
# 我是你爹
f=open(r'D:\0423\pycharm\0424\0509\0509.txt','r',encoding='utf-8') # 绝对路径内含有转义符,需要使用r关闭转义
content = f.read()
print(content) python 40期
f.close()
.readline() 每次读取一行,逐行读取;如果.readline(8)则是读取该行索引为0到7的内容;如果需要读取多行可以配合for循环使用
f=open(r'test0515.txt','r',encoding='utf-8')
print(f.readline()) # 读取第一行
print(f.readline()) # 读取第二行
f.close()
python 第一行
1 第二行
f=open(r'test0515.txt','r',encoding='utf-8')
for i in range(2):
print(f.readline())
f.close()
python 第一行
1 第二行
.readlines() 按行读取把所有的内容读取到一个列表中,每一行内容就是列表中的一个元素
f=open(r'test0515.txt','r',encoding='utf-8')
print(f.readlines()) # 按行读取把所有的内容读取到一个列表中,每一行内容就是列表中的一个元素,所以可以加索引读取指定的行数如第七行:f.readlines()[8]
f.close() ['python 第一行\n', '1 第二行']
注意光标的位置,如下的错误示范,print(content2)是没有任何内容的;因为content1已经读取完全部内容,光标在文件内容的最后,所以f1.readline()读取不到任何内容
解决方法:1、使用f1.seek(0)移动光标位置到最开始位置
2、关闭文件重新打开再读取
f1 = open('py0518.txt','r',encoding='utf8')
content1 = f1.read()
print(content1) # 已经读取完毕,光标在最后
content2 = f1.readline()
print(content2)
f1.close() # 错误示范
f1 = open('py0518.txt','r',encoding='utf8')
content1 = f1.read()
print(content1) # 已经读取完毕,光标在最后
f1.seek(0) # 使用f1.seek(0)移动光标位置到最开始位置
content2 = f1.readline()
print(content2)
f1.close() # 可正常读取
f1 = open('py0518.txt','r',encoding='utf8')
content1 = f1.read()
print(content1)
f1.close()
f2 = open('py0518.txt','r',encoding='utf8') # 或使用先关闭文件再重新打开的方法
content2 = f2.readline()
print(content2)
f2.close()
.write() w写入模式,覆盖写入(清除原来的内容,谨慎使用),如果文件不存在,则会在对应路径自动创建一个并写入对应内容
a写入模式,追加写入(append),如果文件不存在,则会在对应路径自动创建一个并写入对应内容
f=open(r'test0515.txt','w',encoding='utf-8') # w,写入模式;打开文件
print(f.write('dahanbi')) 7 # 写入内容,打印的是内容的长度
f.close() # 关闭
f=open(r'test0515.txt','a',encoding='utf-8') # a,写入模式;打开文件
print(f.write('1dahanbi')) 8 # 追加写入内容,打印的是追加写入内容的长度;可使用\n换行符
f.close()
rb:只读模式,以二进制的模式去打开,如果文件不存在则会报错
wb:写入模式,以二进制的模式去打开,覆盖写入(清除原来的内容),如果文件不存在,则会在对应路径自动创建一个并写入对应内容
ab:写入模式,以二进制的模式去打开,追加写入(append),如果文件不存在,则会在对应路径自动创建一个并写入对应内容
这三种模式通常用来读写非文本格式的文件,这种就不需要指定编码格式:
open('文件名','打开文件的模式')
# 复制图片,逻辑是先只读模式打开,再用写入模式复制
#第一步,打开文件
f1 = open('tupian_gif','rb')
f2 = open('fuzhi_gif','wb') # 复制的格式需与原文件保持一致
# 第二步,读取内容,写入新文件
content = f1.read()
f2.write(content)
# 第三步,关闭文件
f1.close()
f2.close()
with 可以通过with去打开文件,操作完了之后会自动关闭文件,更为便捷
with执行完之后变量还在,在with在打印读取内容会提示文件已关闭
with open('tupian_gif','rb') as f1: # 使用with关键字打开文件并赋值给变量f1
conten = f1.read()
with open('fuzhi_gif','wb') as f2:
f2.write(conten)
当前目录下已经有一个子目录 common, 请在 run.py 中编写代码,在 common 目录下创建一个叫 excel.py 的模块
-- data/
-- common/
-- run.py
f = open('common/excel.py', 'w')
f.close()
复制文件名操作如下,在同一路径下右键选择copy即可,不在同一路径下右键选择copy path,然后选择第一个