python中的文件对象:
文件对象不仅可以用来访问普通的磁盘文件, 而且也可以访问任何其它类型抽象层面上的"文
件". 一旦设置了合适的"钩子", 你就可以访问具有文件类型接口的其它对象, 就好像访问的是普
通文件一样.
遍历文件
案例:图书信息读取器
import tkinter as tk
root=tk.Tk()
root.title("Small Calculator")
root.geometry("500x300")
lb=tk.Listbox(root)
lb.place(x=180,y=100)
def clickFun():
with open('book.text','r',encoding='utf-8')as f:
book_list=f.readlines()
for book in book_list:
lb.insert('end',book)
buttonl=tk.Button(root,text='Display',width=20,height=2,fg='pink',command=clickFun)
buttonl.pack()
root.mainloop()
open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象。模式和缓冲参数都是可选的,默认为只读模式打开文件。
文件对象的访问的模式:
r 以只读方式打开
rU 或 Ua 以读方式打开, 同时提供通用换行符支持 (PEP 278)
w 以写方式打开 (必要时清空)
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ )
x 如果文件存在报错,不存在则创建
***加b模式打开,不可以在指定encoding,切写入时也需要转换为字节写入文件
文件方法可以分为四类: 输入, 输出, 文件内移动, 以及杂项操作.
read() 方法用来直接读取字节到字符串中, 最多读取给定数目个字节. 如果没有给定 size
参数(默认值为 -1)或者 size 值为负, 文件将被读取直至末尾.
readlines() 方法并不像其它两个输入方法一样返回一个字符串. 它会读取所有(剩余的)行然
后把它们作为一个字符串列表返回. 它的可选参数 sizhint 代表返回的最大字节大小. 如果它大
于 0 , 那么返回的所有行应该大约有 sizhint 字节(可能稍微大于这个数字, 因为需要凑齐缓冲区
大小).
def clickfun():
global a
if a == 0:
with open('book2.txt', 'r', encoding='utf-8')as f:
book_list = f.readlines()
for book in book_list:
numbers = book.strip()
for num in numbers:
lb.insert('end', num)
number_list.append(num)
a += 1
write() 内建方法功能与 read() 相反. 它把含有文本数据或二进制数据块的字符串写入到文件中去.
seek() 方法(类似 C 中的 fseek() 函数)可以在文件中移动文件指针到不同的位置. offset
字节代表相对于某个位置偏移量. 位置的默认值为 0 , 代表从文件开头算起(即绝对偏移量), 1 代
表从当前位置算起, 2 代表从文件末尾算起. 如果你是一个 C 程序员,并且使用过了 fseek() , 那
么,0, 1, 2 分别对应着常量 SEEK_SET, SEEK_CUR, 以及 SEEK_END. 当人们打开文件进行读写操
作的时候就会接触到 seek()方法。
文件对象的内建方法列表
file.close() 关闭文件
file.fileno() 返回文件的描述符(file descriptor ,FD, 整数值)
file.flush() 刷新文件的内部缓冲区
file.atty() 判断 file 是否是一个类 tty 设备
file.nexta() 返回文件的下一行(类似于 file.readline() ), 或在没有其它行时
引发 StopIteration 异常
file.read(size=-1) 从文件读取 size 个字节, 当未给定 size 或给定负值的时候, 读
取剩余的所有字节, 然后作为字符串返回.如果打开模式无b,则read按字符读取,否则按字节读取
file.readline(size=-1) 从文件中读取并返回一行(包括行结束符), 或返回最大 size
file=open(‘test’,‘ab’)
file.write(bytes(‘hehe’,encoding=‘utf-8’)) 向文件写入字符串 (会覆盖原有数据,坑
file.close() 关闭文件
file.tell获取当前指针的位置
file.read()如果打开模式无b,则read按字符读取,否则按字节读取
file.fileno文件描述符
file.truncat 截断数据,清除文件指针之后的数据
file.seek(off, whence=0) 在文件中移动文件指针, 从 whence ( 0 代表文件其始, 1代表当前位置, 2 代表文件末尾)偏移 off 字节,不论是否有中文,都以字节为单位
file.truncate(size=file.tell()) 截取文件到最大 size 字节, 默认为当前文件位置
file.writelines(seq) 向文件写入字符串序列 seq ; seq 应该是一个返回字符串的可迭代对象
file.readlines(sizhint=0) 读取文件的所有行并作为一个列表返回(包含所有的行结束符)
对文件系统的访问大多通过 Python 的 os 模块实现. 该模块是 Python 访问操作系统功能的主 要接口.
案例:Excel文件读取器
import os
import tkinter as tk
import tkinter.filedialog as fal
import fileinput
import xlrd
from tkinter import ttk
BoolForm=tk.Tk()
BoolForm.geometry("1300x400")
l1=tk.Label(BoolForm,text='10 BEST PROGAMMING BOOKS',font=18)
l1.pack()
def chooseFile():
try:
default_dir = r'C:\Users\宋雨琪\untitled\venv'
file_path = fal.askopenfilename(title=u'选择文件', initialdir=(os.path.expanduser(default_dir)))
data=xlrd.open_workbook(file_path)
table=data.sheet_by_index(0)
for i in range(1,int(table.nrows)):
treeView.insert('','end',values=table.row_values(i))
except Exception:
print("请选择正确的路径")
ReadButton=tk.Button(BoolForm,text='Read Excel',command=chooseFile)
ReadButton.pack()
treeView=ttk.Treeview(BoolForm,height=10,show="headings",columns='1 2 3 4 5 6')
treeView.column("1",anchor='centor')
treeView.column("2",anchor='centor')
treeView.column("3",anchor='centor')
treeView.column("4",anchor='centor')
treeView.column("5",anchor='centor')
treeView.column("6",anchor='centor')
treeView.heading("1",text="No")
treeView.heading("2",text="Title")
treeView.heading("3",text="Author")
treeView.heading("4",text="publisher")
treeView.heading("5",text="Year")
treeView.heading("6",text="Total Page")
treeView.pack()
BoolForm.mainloop()
os.path 可以完成一些针对路径名的操作. 它提供的函数可以完成管理和操作文件路径名中的各个部分, 获取文件或子目录信息, 文件路径查询等操作os.path 模块中的路径名访问函数