-
文件
1.文本文件:可以使用文本剪辑软件查看,如python源文件,记事本txt
2.二进制文件:不可以使用文本剪辑软件查看,比如图片,音频等
-
文件的基本操作
1.三个步骤:打开文件,读写文件,关闭文件
2.一个函数三个方法:函数open,方法read,write,close
open:打开文件,并返回文件操作对象
read :将文件内容读取到内存,read方法执行后,会把文件指针移动到文件的末尾
write : 将指定内容写入文件
close :关闭文件
read/write/close三个方法都需要通过文件对象来调用
3.read方法
a.打开文件,例子见下:
#open第一个参数是要打开的文件名,encoding='UTF-8'是字符编码一般是UTF-8
#默认的路径
file = open("vw.txt",encoding='UTF-8')或
#指定路径,PS:路径前面加上r是为了后面就不用转义字符了
file = open(r'd:\46\vw.txt’,encoding='UTF-8')
text=file.read()
print(text)
file.close()
b.open函数详解
f = open("文件名", "访问方式"):频繁的移动文件指针,会影响文件的读写效率,开发中更多的时候会以只读、只写的方式来操作文件
访问方式:
r | 只读方式打开文件(默认模式) | 指针在开头 | 文件不存在,抛出异常 |
w | 只写方式打开文件 | 文件存在,被覆盖 文件不存在,创建新文件 | |
a | 追加方式打开文件 | 文件存在,指针放在结尾 | 文件不存在,创建新文件 |
r+ | 读写方式打开文件 | 指针放在开头 | 文件不存在,抛出异常 |
w+ | 读写方式打开文件 | 文件存在,被覆盖 文件不存在,创建新文件 | |
a+ | 读写方式打开文件 | 文件存在,指针放在结尾 | 文件不存在,创建新文件 |
c.指针的变动
文件对象.seek(0) : 将文件指针移到开头
d.按行读取文件
read 方法默认会把文件的所有内容一次性读取到内存如果文件太大,对内存的占用会非常严重
readline方法可以一次读取一行内容方法执行后,会把文件指针移动到下一行,准备再次读取.比如
或者
或者:
-
文件和文件夹的常用操作
1.创建、重命名、删除、改变路径、查看目录内容。需要导入os模块
2.文件操作
- 文件重命名:os.rename(源文件名,目标文件名)
- 删除文件:os.remove(文件名)
3.目录操作
- 目录列表:os.listdir(目录名)
- 创建目录:os.mkdir(目录名)
- 删除目录:os.rmdir(目录名)
- 获取当前目录:os.getcwd()
- 判断是否是文件:os.path.isdir(文件路径)
作业1: 完成网页自动生成软件的制作,选择news.template的模板文件,点击生成网页按钮,在当前项目中生成以网页标题为文件名的.html文件,
import tkinter
import os
from tkinter import messagebox
import tkinter.filedialog
top=tkinter.Tk()
top.title('网页自动生成器')
top.config(bg='blanched almond')
sw=top.winfo_screenwidth()
sb=top.winfo_screenheight()
width=500
height=300
x=(sw-width)//2
y=(sb-height)//2
top.geometry('%dx%d+%d+%d'%(width,height,x,y))
lexcel=tkinter.Label(top,text='选择模板文件:',font=('楷体',12),height=2,bg='blanched almond')
lexcel.grid(row=0,column=0)
eexcel=tkinter.Entry(top,font=('楷体',12),width=20)
eexcel.grid(row=0,column=1)
def choose():
eexcel.delete(0,'end')
file_path=tkinter.filedialog.askopenfilename(title='选择文件')
eexcel.insert('end',file_path)
bexcel=tkinter.Button(top,text='选择',font=('楷体',12),bg='blanched almond',width=10,height=1,command=choose)
bexcel.grid(row=0,column=2)
ltitle=tkinter.Label(top,text='网页标题:',font=('楷体',12),height=2,bg='blanched almond')
ltitle.grid(row=1,column=0)
etitle=tkinter.Entry(top,font=('楷体',12),width=20)
etitle.grid(row=1,column=1)
lcontent=tkinter.Label(top,text='网页内容:',font=('楷体',12),height=2,bg='blanched almond')
lcontent.grid(row=2,column=0)
econcent=tkinter.Entry(top,font=('楷体',12),width=20)
econcent.grid(row=2,column=1)
def save():
strname=eexcel.get()
strtitle=etitle.get()
strcontent=econcent.get()
if str(strname)=='':
messagebox.showinfo('选择提示','没有选择文件')
elif str(strname).find('.template',0,len(str(strname)))==-1:
messagebox.showinfo('选择提示','文件格式不正确')
elif str(strtitle)=='':
messagebox.showinfo('输入提示','输入标题')
elif str(strcontent)=='':
messagebox.showinfo('输入提示','输入内容')
else:
f=open(strname,encoding='UTF-8')
text=f.read()
f.close()
text=text.replace('${title}',strtitle).replace('${content}',strcontent)
file_path=r'%s%s.html'%(os.getcwd(),strtitle)
fw=open(file_path,'w',encoding='UTF-8')
fw.write(text)
fw.close()
messagebox.showinfo('成功提示','网页生成成功')
bsave=tkinter.Button(top,text='生成网页',bg='blanched almond',font=('楷体',12),width=10,height=1,command=save)
bsave.grid(row=3,column=1)
top.mainloop()
作业2:统计一个文件中单词的出现次数,并将内容和出现次数写入到另一个文件中
f=open(r'a.txt','r',encoding='utf-8')
data=f.readlines()
print(data)
datal=[]
for x in data:
datal.append(x.splitlines()[0])
print(datal)
data2=datal.copy()
data2=set(data2)
f2=open(r'b.txt','a',encoding='utf-8')
for x in data2:
sum=0
for y in datal:
if x==y:
sum+=1
data3='{0} {1}\n'.format(x,sum)
f2.writelines(data3)
f.close()