打开文件
如果想要对文件进行IO(input、output)处理,那么一定需要使用到特定的处理函数,Python里面提供了一个open()函数这个函数的主要目的是可以进行文件的打开。
def open(file,mode='r',buffering=None,encoding=None,erroes=Nonee,newline=Nonw,closefd=True)
范例:打开文件
def main():#主函数
try:#此时是否写上“r”模式都是一样的因为默认mode就是“r”
file = open("d:\\info.txt","r") #路径之中的“\\”表示的是“\”
print("文件名称:%s" % file.name)
print("文件是否关闭:%s" % file.closed)
print("文件访问模式:%s" % file.mode)
finally:
file.close() #文件的操作属于资源的操作,资源操作的最后一定要关闭资源
print("调用close()方法关闭资源对象,文件的关闭状态:%s" % file.closed)
if __name__ == "__main__":#判断程序执行名称
main() #调用主函数
在进行文件打开的时候如果不设置任何的模式类型,则默认为‘r’(只读模式),实际上在整个的Python里面对于文件的模式提供多种类型。
在进行文件打开的时候,一般都要求文件存在(这个和所选择的模式有关系),如果此时以只读的模式打开文件。并且文件路径不存在的话,那么就会出现如下的错误信息。
FileNotFoundError:[Errno 2]No such file or directory: 'd:\\info.txt'
在任何的代码编写的时候对于文件的资源对象一定要使用close()进行关闭,因为所有的I/O资源都是有限的。
文件读写
当使用 open()函数打开了一个文件之后,那么接下来肯定要对文件内容进行读写操作,那么如果要进行读写,则可以直接使用创建的文件对象进行操作
范例:观察文件对象的类型
def main():#主函数
try:
file = open("d:\\info.txt","w") #路径之中的“\\”表示的是“\”
print(type(file))
finally:
file.close() #文件的操作属于资源的操作,资源操作的最后一定要关闭资源
if __name__ == "__main__":#判断程序执行名称
main() #调用主函数
通过类型的获取可以发现,所有的IO的文件对象都是“<class '_io.TextIOWrapper'>”,它属于一个装饰类型,相当于里面会有许多的操作功能被包装在了一起。这个类的对象可以进行文件的读写操作,所以可以使用如下方法来完成
def main():#主函数
try:
file = open("d:\\info.txt","w") #路径之中的“\\”表示的是“\”
file.write("wak:www.kunCool.com") #向文件之中写入数据
finally:
file.close() #文件的操作属于资源的操作,资源操作的最后一定要关闭资源
if __name__ == "__main__":#判断程序执行名称
main() #调用主函数
此时“d:\info.txt”并不存在。所以当开发者通过file对象进行输出的时候,由于采用“w”写模式,这样文件不存在时自动进行创建,并且自动进行内容的保存。
既然所有的文件对象最终都是需要被开发者关闭的,那么久可以结合with语句实现自动关闭处理。
范例:使用with管理文件对象。
def main():#主函数
with open("d:\\info.txt","w") as file: #路径之中的“\\”表示的是“\”
file.write("wak:www.kunCool.com") #向文件之中写入数据
if __name__ == "__main__":#判断程序执行名称
main() #调用主函数
通过with实现所有资源对象的连接与释放(close)是在Python中编写资源操作的重要技术手段,通过这样的操作结构可以极大的减少&优化代码结构。
在进行文件处理的时候不仅仅只有所谓的读取(r)、写入(w)的操作,实际上本身还可以进行文件内容的追加处理,如果要想实现文件内容的追加则可以使用“a”模式来完成。
def main():#主函数
with open("d:\\info.txt","w") as file: #路径之中的“\\”表示的是“\”
file.write("wak:www.kunCool.com\n") #向文件之中写入数据
if __name__ == "__main__":#判断程序执行名称
main() #调用主函数
每当执行一次内容的输出之后实际上都是在文件的最后进行内容的追加,例如:如果你现在需要对使用者做一些信息的记录操作,那么就可以通过追加的形式来进行处理。
在文件写入完成之后肯定需要进行文件的读取操作,在使用open()函数操作的时候默认的文件类型就是“r”(读模式),那么本次也可以使用这种读模式打开文件,而后需要利用循环的模式读取每一行数据内容。
def main():#主函数
with open("d:\\info.txt","r") as file: #路径之中的“\\”表示的是“\”
val = file.readline() #读取一行数据内容
while val: #如果此时val有内容
print(val,end="")
val = file.readline() #继续读取下一行数据
if __name__ == "__main__":#判断程序执行名称
main() #调用主函数
实际上对弈以上所给出的文件读取的操作,如果使用Python进行处理的时候,也可以进一步简化操作。
范例迭代文件对象
def main():#主函数
with open("d:\\info.txt","r") as file: #路径之中的“\\”表示的是“\”
for line in file: #迭代文件对象
print(line,end="") #输出每行内容
if __name__ == "__main__":#判断程序执行名称
main() #调用主函数
文件对象本身是可以迭代的,在迭代的时候是以换行转义字符“\n”为主进行分割的,每一次迭代就读取到一行数据内容。
实现拷贝
with open("c:\\windows\\system32\\cmd.exe",'rb') as sf: #打开文件
data = sf.read() #复制文件到变量data
with open("c:\\users\\A\\desktop\\dmc.exe","wb") as df:
df.write(data) #打开文件并拷贝data进入
print(sf.closed) #执行退出 并查看退出状态
print(df.closed) #执行退出 并查看退出状态
JSON知识点学习
import json
x = ['yu','bright','1','4','5']
x_bianma = json.dumps(x) #利用json的dumps对列表x进行字符串编码操作
print(x_bianma)
x_jiema = json.loads(x_bianma)
if x_jiema == x: #编码后与x相同类型
print("True")
if not(x_bianma == x): #编码后与x不同类型
print("False")
f_ = open('sample.txt','w')
json.dump({'a':1,'b':2,'c':3},f_) #对字典进行编码写入文件
f_.close()
输出结果
移动文件指针
fp = open('sample_new.txt','r+')
fp.tell() # 返回指针当前位置
0
fp.read(20) # 读取20个字符
'第一个文件操作案例。Hello '
fp.seek(13) #重新定位文件指针的位置
13
fp.write('测试')
fp.seek(0)
0
fp.read()
'测试文件操作案例。Hello world\n文本文件的读取方法\n文本文件的写入方法\nHello world\n文本文件的读取方法\n文本文件的写入方法\n'
fp.close()