1.1 打开文件
open(file, mode=‘r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True)
file:文件路径
mode:文件打开模式:'r’读4;'w’写;'x’写模式,新建一个文件;'a’追加模式;'b’以二进制模式打开文件;‘t’以文本模式打开;’+'可读写模式。
1.2 文件对象方法
fileObject.close()
:用于关闭一个已打开的文件
fileObject.read([size])
:用于从文件读取指定的字符数
fileObject.readline()
:读取整行
fileObject.readlines()
:用于读取所有行(直到结束符 EOF)并返回列表
fileObject.tell()
:返回文件的当前位置
fileObject.seek(offset[, whence])
:用于移动文件读取指针到指定位置(offset:需要移动的字节数;whence:表示从哪个位置开始偏移)
fileObject.write(str)
:用于向文件中写入指定字符串,返回的是写入的字符长度。
fileObject.writelines(sequence)
:向文件写入一个序列字符串列表
2. OS模块
os.getcwd()
:用于返回当前工作目录。
os.chdir(path)
:用于改变当前工作目录到指定的路径。
listdir (path=’.’)返回path指定的文件夹包含的文件或文件夹的名字的列表。
os.mkdir(path)
:创建单层目录,如果该目录已存在抛出异常。
os.makedirs(path)
:用于递归创建多层目录,如果该目录已存在抛出异常。
os.remove(path)
:用于删除指定路径的文件。如果指定的路径是一个目录,将抛出 OSError。
os.rmdir(path)
:用于删除单层目录。仅当这文件夹是空的才可以, 否则, 抛出 OSError。
os.removedirs(path)
:递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常。
os.rename(src, dst)
:方法用于命名文件或目录,从 src 到 dst,如果 dst 是一个存在的目录, 将抛出 OSError。
os.system(command)
:运行系统的shell命令(将字符串转化成命令)
os.curdir
:指代当前目录(.)
os.pardir
:指代上一级目录(…)
os.sep
:输出操作系统特定的路径分隔符(win下为\)
os.linesep
:当前平台使用的行终止符(win下为\r\n)
os.name
:指代当前使用的操作系统
os.path.basename(path)
:去掉目录路径,单独返回文件名
os.path.dirname(path)
:去掉文件名,单独返回目录路径
os.path.join(path1[, path2[, ...]])
:将 path1,path2 各部分组合成一个路径名
fileObject.write(str)
:分割文件名与路径,返回(f_path,f_name)元组。如果完全使用目录,它会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在。
os.path.splitext(path)
:分离文件名与扩展名,返回(f_path,f_name)元组。
os.path.getsize(file)
:返回指定文件大小,单位是字节。
os.path.getatime(file)
:返回指定文件最近的访问时间
os.path.getctime(file)
:返回指定文件的创建时间
os.path.getmtime(file)
:返回指定文件的最新的修改时间
os.path.exists(path)
:判断指定路径(目录或文件)是否存在
os.path.isabs(path)
:判断指定路径是否为绝对路径
os.path.isdir(path)
:判断指定路径是否存在且是一个目录
os.path.isfile(path)
:判断指定路径是否存在且是一个文件
os.path.islink(path)
:判断指定路径是否存在且是一个符号链接
os.path.ismount(path)
:判断指定路径是否存在且是一个悬挂点
os.path.samefile(path1,path2)
:判断path1和path2两个路径是否指向同一个文件
3.pickle模块
通过 pickle 模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过 pickle 模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
pickle.dump(obj, file, [,protocol]) 将obj对象序列化存入已经打开的file中。
pickle.load(file) 将file中的对象序列化读出
练习题:
1.打开中文字符的文档时,会出现乱码,Python自带的打开文件是否可以指定文字编码?还是只能用相关函数?
在读取中文的情况下,首先需要了解目前的编码方式是什么,然后再用decode或者encode去编码和解码。
2.编写程序查找最长的单词
import re
def longest_word(filename):
f = open(filename, mode='r')
l1 = f.readlines()
l2 = []
l3 = []
for i in range(len(l1)):
str1 = l1[i]
l2 = l2 + re.split(' ', str1)#注意这里引号里面是空格,若要查找最长的句子引号里面就是换行符'\n'
temp = len(l2[0])
l3.append(l2[0])
n = 0
for j in range(len(l2)-1):
if len(l2[j+1]) > temp:
l3 = []
temp = len(l2[j+1])
l3.append(l2[j+1])
n = j+1
if len(l2[j+1]) == temp:
l3.append(l2[j+1])
return l3
print(longest_word("test.txt"))
#['general-purpose,', 'general-purpose,', 'object-oriented,']