fp = open("xxx.txt",'w',encoding="utf-8")
fp.write("中国")
fp.close
fp = open("xxx.txt",'w',encoding="utf-8")
只有open("xxx.txt")
时,目的是获取文件句柄,如果没有该文件将会自动创建“xxx.txt”文件(无关打开之后的操作类型)
但是:如果使用r
,没有未找到改文件名,将会报错:FileNotFoundError: [Errno 2] No such file or directory: 'xxxx.txt'
w,a
不会出现这种情况,它们会直接创建文件只有open("xxx.txt",'w')
Python2默认是UTF-8编码,但是Python3将会根据系统(WINDOWS,MAC,LINUX)编码方式(中文简体是GBK)进行编码
utf-8与Unicode的区别主要区别在于:Unicode为世界上所有字符都分配了一个唯一的数字编号,UTF-8是Unicode编码的一种实现
r:读
w:写
a:追加
r+:读写方式打开文件
特征案例:
也就是指针从文档开始部分写入文件
w+:读写方式打开文件
与w
操作相同。
但是,特征案例中:
fp = open("xxx.txt",'w+')
步骤总是先使用“xxx.txt”替换原始文件,然后再写入fp = open("xxx.txt",'w+')
后面紧跟着fp.read()
,也只能读出空字符因此,使用W+是一种方式,先写再读
但是,这时候要读的话,文件指针在文件最末尾还是读取的空字符
因此,必须把文件指针,移动到自己想要的位置处
fp.seek(0,0)
a+:追加和读的方式
fp = open('xxxx.txt','a+')
fp.write('\n'+"中国"*2)
str = fp.read()
print(str)
fp.close()
文件指针一样,这时候读取的是空字符
Unicode编解码问题详解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YOpqAKeJ-1570455739106)(C:\Users\蚩尤克里里\AppData\Roaming\Typora\typora-user-images\1570444538053.png)]
#fp = open("xxx.txt",'r',encoding='utf-8')#相当于告诉open函数以‘utf-8打开文件’
#fp.write("中国")
fp = open('xxx.txt','rb')
str = fp.read()
print(str.decode('utf-8'))
fp.close()
每次读取一行:readline()
任务:使用readline遍历文件中所有的行数据
while True:
line = fp.readline()
if not line:#如果没有这一行,break
break
#相应操作
print(line)
按行的形式将所有文件读取完:readlines()
fp.readlines()
fp = open(fname,'r')
for line in fp:
print(line)
# line是字符串属性,但它代表一行字符串
# fp虽然是指针,但它代表整个字符串
fp.close
fp.writelines(['a','c','b'])
注意writeline不会换行
write函数只能写入字符串
TypeError: write() argument must be str, not list
writelines函数参数能写入数组
fp.tell()
seek(offset,from)
# offset:偏移量,可正可负
# from:相对位置,0表示开头,1表示从当前位置,2表示文件末尾
fp.flush()
try:
fp = open('fname','r+')
fp.read()
fp.write()
except:
print('Error')
finally:
f.close()
使用with语句优化文件操作:
with open('fname','r+') as fp:
fp.read()
fp.write()
# ……
try……except……finally……
fp = open('fname','r+')
#思路1:A文件=>[]=>B文件
fname = "【问题】十万个为什么记录本"
lines = []
with open(fname+".txt",'r',encoding='utf-8') as fp:
for line in fp:
lines.append(line)
with open(fname+"Copy.txt",'w') as fp1:
fp1.writelines(lines)
for line in fp:
line是字符串(本质是指针对象)lines = []
是数组,lines.append(line)
lines = fp.append(line)
#思路2:A文件=>B文件
fname = "【问题】十万个为什么记录本"
# lines = []
# with open(fname+".txt",'r',encoding='utf-8') as fp:
# for line in fp:
# lines.append(line)
# with open(fname+"Copy.txt",'w') as fp1:
# fp1.writelines(lines)
with open(fname+".txt",'r',encoding='utf-8') as fp:
with open(fname+"Copy.txt",'w') as fp1:
for line in fp:
fp1.write(line)
# 思路:使用.startswith("string")函数
lines = []
for line in fp:
if line.startswith("