用py操作文件
1、找到文件并打开 ------- f = open(filename)
2、读、修改 ---------- f.read() 为空即读所有;f.write(修改的内容)
3、保存&关闭 --------- f.close() 保存并关闭
文件打开模式只能以一种形式打开:
r 即read
w 即write,创建模式,如果文件里有内容用w的话会把原来的文件清空再创建
a 即append
用法:
创建模式
方法1、
f = open(file = '文件所在路径/文件名.后缀' , mode = 'w') 注意:路径需要用正斜杠 /
f.write()
f.close()
方法2(推荐)、
with open(file = '文件所在路径/文件名.后缀' , mode = 'w') as f:
f.write()
读模式
f = open(file = '文件所在路径/文件名.后缀' , mode = 'r')
print(f.readline()) #读一行
date = f.read() #读剩下的所有
print(date)
f.close()
追加模式
f = open(file = ‘文件名.后缀' , mode = 'w')
f.write(需要添加的内容) #追加到文件尾部
f.close()
循环文件
f = open(file = ‘文件名.后缀' , mode = 'w')
for line in f:
split()方法,即通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
例:
str = "Line1-abcdef Line2-abc Line4-abcd";
print str.split( ); # 以空格为分隔符,包含
print str.split(' ', 1 ); # 以空格为分隔符,分隔成两个
输出结果
其他必会功能
1、f.seek() #走多少个字节
2、f.truncate() #指定长度截断文件,指定长度的话就从文件开头开始截断指定长度,不指定长度的话就从当前位置到文件尾部
混合模式
1、w+ 写读,这功能没有什么意义
2、r+ 读写,能读能写,但都是写在文件的最后,和追加一样
f = open('文件名','r+')
f.write("写入的内容")
f.write("写入的内容")
3、a+ 追加读,文件一打开光标会在文件尾部,写的数据全会是追加的形式
f = open('文件名','a+')
f.write("写入的内容")
f.write("写入的内容")
f.seek(0) #从头开始读
修改文件
1、用r+模式打开
f = open('文件名','r+') 注:此时光标是在文件尾部
f.seek() 注:括号内填想要修改的文件位置,0是从头开始
f.write("修改的内容") 注:修改的内容是从你seek的位置开始往后覆盖原来的内容,比如,seek(7),write("哈哈"),即从原来内容的第7个字符开始,“哈哈”会覆盖掉第8第9个字符的内容
不占内存修改文件
一、用旧文件读,用新文件写(生成新文件)
1、用r模式打开旧文件
f = open('文件名','r')
2、用w模式打开新文件
f_new = open('文件名.new','w')
3、定义旧内容、新内容
old_str = "被修改内容"
new_str = "修改内容"
4、循环旧文件
for line in f:
if "被修改内容" in line:
line = line.replace(old_str,new_str)
#replace()方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次
5、写入新文件
f_new.write(line)
6、关闭旧、新文件
f.close()
f_new.close()
二、新文件完全覆盖旧文件
1、导入包
import os #os包是和操作系统进行操作的,创建文件、修改文件、删除文件等
old_file = '文件名'
new_file = '文件名.new'
f = open(old_file,'r')
f_new = open(new_file,'w')
old_str = "被修改的内容"
new_str = "修改的内容"
for line in f:
if "被修改的内容" in line:
line = line.replace(old_str,new_str)
f_new.write(line)
f.close()
f_new.close()
os.replace(new_file,old_file)
方法2:
import os
with open('旧文件名','r') as read_f,open('新文件名','w') as write_f:
for line in read_f:
line = line.replace('被修改的内容','修改的内容')
write_f.write(line)
os.remove('旧文件名')
os.replace('新文件名',''旧文件名’)
文件从硬盘写到内存
1、不关闭文件的状态下从内存写到硬盘,注:把数据写在硬盘上的一定是字符串
语法:f.flush()
把字符串变为对应数据类型的方法是:
eval()