文件操作

# open("文件名","文件模式",encoding='utf-8')
# 3种文件模式:r、w、a
# r模式:读模式,只能读不能写,文件不存在不会创建,会报错,不写模式默认就是读模式
# w模式:写模式,只能写不能读,文件不存在会创建,文件已经存在会清空文件的内容
# a模式:追加模式,只能写不能读,文件不存在会创建,文件已经存在不会清空文件的内容,新内容会追加到末尾


# read操作
f=open("a.txt","r")
# result=f.read() #读取文件中所有内容放到一个字符串
# result=f.readlines() #读取文件中所有内容放到一个list中
# result=f.readline() #读取一行内容,返回一个字符串
# print(result)
# 文件指针,先读readlines时,文件指针已经到文件末尾,再读read时,已经读不到内容了
print(f.readlines())
f.seek(0)#可以用seek将文件指针移动到0的位置,在read就可以读到内容了
print(f.read())
f.close()

# write和writelines
lis=["1","2","3","4"]
f=open("a.txt","w",encoding='utf-8')
# f.write("1111") #write只能写一个字符串到文件中
f.writelines(lis) #writelines可以将列表中的元素循环写进文件中
f.close()

# 将lis中的内容写进文件且换行
lis=[1,2,3,4,5]
f=open("a.txt",'w')
# 方法一:用循环
for i in lis:
f.write(str(i)+" ")
# 方法二:用列表生成式
num=[str(i)+" " for i in lis]
f.writelines(num)

f.write(num)
f.close()



# r+ 读写 w+ 写读 a+ 追加读模式
# r相关模式,文件不存在会报错,文件指针在最前面
# w相关模式,文件不存在会创建,会清空文件的内容
# a相关模式,文件不存在会创建,默认文件指针在最后,如果需要读,需要移动文件指针到最前面;但是不管怎么移动文件指针,写的话都是写在最后面
#
f=open("a.txt","r+",encoding="utf-8")
print (f.tell())
print(f.write("ppppp"))
print (f.tell())
f.close()

# f=open("a.txt","w+",encoding="utf-8")
# print(f.tell()) # 输出文件指针的位置
# f.flush() # ???????????????????????????????????????????????
# f.write("123")
# f.seek(0) #打开文件时,指针在0的位置,写了123后,指针在3的位置,需要将指针移动到0才能读到文件
# print(f.read())
# f.close()

# f=open("a.txt","a+",encoding="utf-8")
# # a+模式,默认文件指针在最后,读之前需要移动文件指针
# print(f.tell()) # 输出文件指针的位置
# f.seek(0) # 移动文件指针到0的位置
# print(f.read())
# f.write("123")
# f.close()


文件循环
f=open("a.txt","r")
for line in f:
line.strip(" ")
print("line: %s"%line,end=" ")


# 替换文件内容
# 将access.log文件中的-全部改为*
FILENAME="a.txt"
# 方法一
# f=open(FILENAME,"r")
# str=f.read()
# f.close()
# new_str=str.replace("-","*")
# f=open(FILENAME,"w")
# f.writelines(new_str)
# f.close()

# 方法二
# f=open(FILENAME,"r+")
# str=f.read()
# new_str=str.replace("*","-")
# # f.truncate() #清空文件 ???????????????????????????????????????
# print(f.read())
# f.seek(0)
# f.write(new_str)
# f.close()

# 方法三,用备份文件的方式
import os
f1=open(FILENAME,'r+')
f2=open(FILENAME+".bak","w+")
# str=f1.read()
# new_str=str.replace("*","-")
# f2.write(new_str)
for line in f1:
new_line=line.replace("-","*")
f2.write(new_line)
f1.close()
f2.close()
os.remove(FILENAME)
os.rename(FILENAME+".bak",FILENAME)



# 用with方式打开文件,会自动关闭文件,不用手动close
import os
with open("a.txt","r",encoding="utf-8") as f1, open("a.txt.bat","a+") as f2:
for line in f1:
new_line=line.replace("!","*")
f2.write(new_line)
os.remove("a.txt")
os.rename("a.txt.bat","a.txt")
原文地址:https://www.cnblogs.com/zhengp/p/14721634.html