f = open('将进酒.txt')
print(f)
# <_io.TextIOWrapper name='将进酒.txt' mode='r' encoding='cp936'>
for each in f:
print(each)
# 君不见,黄河之水天上来,奔流到海不复回。
# 君不见,高堂明镜悲白发,朝如青丝暮成雪。
# 人生得意须尽欢,莫使金樽空对月。
# 天生我材必有用,千金散尽还复来。
# ...
f = open('将进酒.txt ')
print('FileName:',f.name) # FileName: 将进酒.txt
f.close()
f = open('将进酒.txt', 'r')
line = f.read(20)
print("读取的字符串: %s" % line)
# 读取的字符串: 君不见,黄河之水天上来,奔流到海不复回。
f.close()
f = open('将进酒.txt','r')
line = f.readline()
print('读取的字符串:' % line)
# 读取的字符串: 君不见,黄河之水天上来,奔流到海不复回。
f = open('将进酒.txt','r')
lines = f.readlines()
print(ines)
for each in lines:
each.strip()
print(each)
# 【输出结果】
f.close
【例子】
f = open('将进酒.txt','r')
line = f.readline()
print(line)
# 君不见,黄河之水天上来,奔流到海不复回
pos = f.tell()
print(pos) # 42
f.close
f = open('将进酒.txt','r')
line = f.readline()
print(line)
# 君不见,黄河直说天上来,奔流到海不复回
f.seek(0,0)
line = f.readline()
print(line)
# 君不见,黄河之水天上来,奔流到海不复回。
f.close()
f = open('workfile.txt', 'wb+')
print(f.write(b'0123456789abcdef')) # 16
print(f.seek(5)) # 5
print(f.read(1)) # b '5'
print(f.seek(-3,2)) # 13
print(f.read()) # b 'd'
在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容。
如果文件打开模式带b,那写入文件内容时,str(参数)要用encode方法转为bytes形式,否则报错:TypeError:a byte-like object is required ,not ‘str’。
【例】
str = '...'
# 文本 = Unicode 字符序列
# 相当于 string 类型
str = b' ...'
# 文本 = 八位序列(0到25之间的整数)
# 字节文字总是以'b或B'作为前缀;他们之间产生一个自己类型的实例,而不是str类型
# 相当于 byte[]
【例子】
f = open('将进酒.txt', 'r+')
str = '\n作者:李白'
f.seek(0, 2)
line = f.write(str)
f.seek(0, 0)
for each in f:
print(each)
# ...
f.close()
f = open('test.txt','w+')
seq = ['小马的程序人生','老马的程序人生']
f.writelines(seq)
f.seek(0,0)
for each in f:
print(each)
# 小马的程序人生
# 老马的程序人生
f.close()
一些对象定义了标准的清理行为,无论系统是否成功的使用了它,一旦不需要它了,那么这个标准的清理行为就会执行。
关键词with 语句就可以保证诸如文件之类的对象在使用完之后一定会正确的执行它的清理方法。
【例子】
try:
f = open('myfile.txt','w')
for line in f:
print(line)
except OSError as error:
print('出错啦! ' % str(error))
finally:
f.close()
# 出错啦!not readable
这段代码执行完毕之后,就算在处理过程中出问题了,文件f也总是会关闭
【例子】
try:
with open('myfile.txt','w') as f:
for line in f:
print(line)
except OSError as error:
print('出错啦!'% str(error))
# 出错啦!not readable
常用的操作系统就有:Windows,Mac OS,Linu,Unix等,这些操作系统底层对于文件系统的访问工作原理是不一样的,因此你可能就要针对不同的系统来考虑使用哪些文件系统模块……,这样的做法是非常不友好且麻烦的,因为这样就意味着当你的程序运行环境一改变,你就要相应的去修改大量的代码来应对。
有了OS(Operation System)模块,我们不需要关心什么操作系统下使用什么模块,OS模块会帮你选择正确的模块并调用。
os.getcwd()用于返回当前工作目录。
os.chdir(path)用于改变当前工作目录到指定的路径。
【例子】
import os
path = 'C:\\'
print('当前工作目录:' % os.getcwd())
# 当前工作目录 : C:\Users\Administrator\PycharmProjects\untitled1
os.chdir(path)
print('目录修改成功: ' % os.getcwd())
# 目录修改成功:C:\
import os
path = 'C:\\'
print('当前中座目录:%s' % os.getcwd())
# 当前工作目录: : C:\Users\Administrator\PycharmProjects\untitled1
os.chdir(path)
print('目录修改成功:'% os.getcwd())
# 目录修改成功:C:\
dirs = os.listdir()
for item in dirs:
print(item)
import os
if os.path.isdir(r '.\b') is Flase:
os.mkdir(r '.\B')
os.mkdir(r '.\B\A')
os.mkdir(r '.\C\A ' ) # FileNotFoundError
import os
print("目录为:%s" % os.listdir(r '.\E\A'))
os.remove(r '.\E\A\test.txt')
print("目录为: %s " % os.listdir(r '.\E\A'))
import os
print("目录为: %s" % os.listdir(r'.\E'))
os.rmdir(r'.\E\A')
print("目录为: %s" % os.listdir(r'.\E'))
import os
print("目录为: %s" % os.listdir(os.getcwd()))
os.removedirs(r'.\E\A') # 先删除A 然后删除E
print("目录为: %s" % os.listdir(os.getcwd()))
os.rename(src, dst)方法用于命名文件或目录,从 src 到 dst,如果 dst 是一个存在的目录, 将抛出 OSError。
import os
print("目录为: %s" % os.listdir(os.getcwd()))
os.rename("test.txt", "test2.txt")
print("重命名成功。")
print("目录为: %s" % os.listdir(os.getcwd()))
import os
path = os.getcwd() + '\\a.py'
a = os.system(r'python %s' % path)
os.system('calc') # 打开计算器
os.curdir指代当前目录(.)
os.pardir指代上一级目录(…)
os.sep输出操作系统特定的路径分隔符(win下为\,Linux下为/)
os.linesep当前平台使用的行终止符(win下为\r\n,Linux下为\n)
os.name指代当前使用的操作系统(包括:‘mac’,‘nt’)
【例子】
import os
print(os.curdir) # .
print(os.pardir) # ..
print(os.sep) # \
print(os.linesep)
print(os.name) # nt
os.path.basename(path)去掉目录路径,单独返回文件名
os.path.dirname(path)去掉文件名,单独返回目录路径
os.path.join(path1[, path2[, …]])将 path1,path2 各部分组合成一个路径名
os.path.split(path)分割文件名与路径,返回(f_path,f_name)元组。如果完全使用目录,它会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在。
os.path.splitext(path)分离文件名与扩展名,返回(f_path,f_name)元组。
【例子】
import os
# 返回文件名
print(os.path.basename(r'C:\test\lsgo.txt')) # lsgo.txt
# 返回目录路径
print(os.path.dirname(r'C:\test\lsgo.txt')) # C:\test
# 将目录和文件名合成一个路径
print(os.path.join('C:\\', 'test', 'lsgo.txt')) # C:\test\lsgo.txt
# 分割文件名与路径
print(os.path.split(r'C:\test\lsgo.txt')) # ('C:\\test', 'lsgo.txt')
# 分离文件名与扩展名
print(os.path.splitext(r'C:\test\lsgo.txt')) # ('C:\\test\\lsgo', '.txt')
os.path.getsize(file)返回指定文件大小,单位是字节。
os.path.getatime(file)返回指定文件最近的访问时间
os.path.getctime(file)返回指定文件的创建时间
os.path.getmtime(file)返回指定文件的最新的修改时间
浮点型秒数,可用time模块的gmtime()或localtime()函数换算
【例子】
import os
import time
file = r'.\lsgo.txt'
print(os.path.getsize(file)) # 30
print(os.path.getatime(file)) # 1565593737.347196
print(os.path.getctime(file)) # 1565593737.347196
print(os.path.getmtime(file)) # 1565593797.9298275
print(time.gmtime(os.path.getctime(file)))
# time.struct_time(tm_year=2019, tm_mon=8, tm_mday=12, tm_hour=7, tm_min=8, tm_sec=57, tm_wday=0, tm_yday=224, tm_isdst=0)
print(time.localtime(os.path.getctime(file)))
# time.struct_time(tm_year=2019, tm_mon=8, tm_mday=12, tm_hour=15, tm_min=8, tm_sec=57, tm_wday=0, tm_yday=224, tm_isdst=0)
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两个路径是否指向同一个文件
【例子】
import os
print(os.path.ismount('D:\\')) # True
print(os.path.ismount('D:\\Test')) # False
Python的pickle模块实现了基本的数据序列和反序列化。
通过 pickle 模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。
通过 pickle 模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
pickle模块中最常用的函数为:
pickle.dump(obj,file, [protocol])将obj对象序列化存入已经打开的file中。
obj:想要序列化的obj对象。
file:文件名称。
protocol:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。
file:文件名称
pickle.load(file)将file中的对象序列化读出。
【例子】
import pickle
dataList = [[1, 1, 'yes'],
[1, 1, 'yes'],
[1, 0, 'no'],
[0, 1, 'no'],
[0, 1, 'no']]
dataDic = {0: [1, 2, 3, 4],
1: ('a', 'b'),
2: {'c': 'yes', 'd': 'no'}}
# 使用dump()将数据序列化到文件中
fw = open(r'.\dataFile.pkl', 'wb')
# Pickle the list using the highest protocol available.
pickle.dump(dataList, fw, -1)
# Pickle dictionary using protocol 0.
pickle.dump(dataDic, fw)
fw.close()
# 使用load()将数据从文件中序列化读出
fr = open('dataFile.pkl', 'rb')
data1 = pickle.load(fr)
print(data1)
data2 = pickle.load(fr)
print(data2)
fr.close()
# [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
# {0: [1, 2, 3, 4], 1: ('a', 'b'), 2: {'c': 'yes', 'd': 'no'}}
1、打开中文字符的文档时,会出现乱码,Python自带的打开文件是否可以指定文字编码?还是只能用相关函数?
2、编写程序查找最长的单词
输入文档: res/test.txt
题目说明:
"""
Input file
test.txt
Output file
['general-purpose,', 'object-oriented,']
"""
def longest_word(filename):
# your code here
pass