文本文件存储的是普通**“字符”**文本,python 默认为 unicode 字符集(两个字节表示一个字符,最多可以表示:65536 个),可以使用记事本程序打开。但是,像 word 软件编辑的文档不是文本文件。
二进制文件把数据内容用“字节”进行存储,无法用记事本打开。必须使用专用的软件解码。常见的有:MP4 视频文件、MP3 音频文件、JPG 图片、doc 文档等
open()函数用于创建文件对象,基本语法格式如下:
open(文件名[,打开方式])
如果只是文件名,代表在当前目录下的文件。文件名可以录入全路径,比如:D:\a\b.txt。
代码如下(示例):(简略版)
with open(r"cece.txt","r",encoding="utf-8") as f:
for a in f:
print(a,end="")
二进制文件和文本文件最大的区别是:如果我们没有增加模式“b”,则默认创建的是文本文件对象,处理的基本单元是“字符”。如果是二进制模式“b”,则创建的是二进制文件对象,处理的基本单元是“字节”。
with open ("说明.docx","rb") as f:
with open("说明_copy.docx","wb") as w:
for line in f.readlines():
w.write(line)
print("文件copy成功")
文本文件的写入一般就是三个步骤:
<font color=#999AAA >代码如下(示例):
f= open(r"F:\1崔\测试.txt","a")
s="创建对象,写入对象,关闭对象"
f.write(s)
f=open(r"F:\1崔\测试.txt","r")
content=f.read()
print(content)
f.close()
==write()/writelines()==写入数据
write(a):把字符串 a 写入到文件中
writelines(b):把字符串列表写入文件中,不添加换行符
f = open(r"d:\bb.txt","w",encoding="utf-8")
s = ["高淇\n","高老三\n","高老四\n"]
f.writelines(s)
f.close()
##执行结果:
高淇
高老三
高老四
with open(r"bb","r",encoding="utf-8") as f:
print(f.read(4))
【操作】文件较小,一次将文件内容读入到程序中
with open(r"d:\bb.txt","r") as f:
print(f.read())
【操作】按行读取一个文件
with open(r"bb.txt","r") as f:
while True:
fragment = f.readline()
if not fragment:
break
else:
print(fragment,end="")
###为文本文件每一行的末尾增加行号
with open("e.txt","r",encoding="utf-8") as f:
lines = f.readlines()
lines = [ line.rstrip()+" #"+str(index+1)+"\n" for index,line in
enumerate(lines)] #推导式生成列表
with open("e.txt","w",encoding="utf-8") as f:
f.writelines(lines)
执行程序后文件内容:
我 love u! #1
尚学堂 #2
百战程序员 #3
import csv
#header=["姓名","性别","年龄","工资"]
#row1=["博凡","女","24","10k"]
#rows=[("Jessica","女","31","100k"),("Krystal","女","26","100k"),("郑氏姐妹","女","28","200k")]
#with open ("csv_文件的读取和写入.csv","w",newline="") as f:#将newline=""可以减少写入csv文件时的空行
#f_csv=csv.writer(f)#创建一个csv 对象,
#f_csv.writerow(header)#写入一行数据,用writerow,但是需要写入的对象是列表
#f_csv.writerow(row1)
#f_csv.writerows(rows)#写入多行数据,用writerows,但是需要写入的对象是列表
with open("csv_文件的读取和写入.csv","r") as r:
r_csv=csv.reader(r)#创建一个csv对象,它是包含所有数据的列表,每一行为一个元素
header_r=next(r_csv)#获得列表对象;包含标题行的信息
print(header_r)
for row in r_csv:
print(row)
```