文件操作
r模式
#can文件内容为(德玛西亚 你的剑就是我的剑) ‘\n’ 为换行符 # 在只读模式下写入内容会报错。 # f=open('can.py','r',encoding='utf-8') # k=f.read() ##read是逐字符地读取,read可以指定参数,设定需要读取多少字符,无论一个英文字母还是一个汉字都是一个字符。 缺点:如果读取的文件很大,会使内存溢出 # print(k) # f.close() #结果显示:德玛西亚
你的剑就是我的剑
#readline # f=open('can.py','r',encoding='utf-8') # k=f.readline() ##readline只能读取第一行代码,原理是读取到第一个换行符就停止. 缺点:不知道光标在哪里停止 # print(k) # f.close() # #结果显示 : 德玛西亚 # #readlines # f=open('can.py','r',encoding='utf-8') # k=f.readlines() #readlines会把内容以列表的形式输出,一次性读取 缺点:如果读取的文件很大,会使内存溢出 # print(k) # f.close() #结果显示:['德玛西亚\n', '你的剑就是我的剑']
# f = open('can.py','r',encoding='utf-8') # for k in f.readlines(): #使用for循环可以把内容按字符串输出。 # print(k) #输出一行内容输出一个空行,一行内容一行空格... 因为文件中每行内容后面都有一个换行符,而且print()语句本身就可以换行,如果不想输出空行,
就需要使用下面的语句:print(line.strip()) # f.close()
德玛西亚
你的剑就是我的剑
w模式
# 在进行操作前,文件中所有内容会被清空。比如在can中写入'hello world',程序执行后file1中就只剩下一句'hello world',can中之前都内容都被删除了。 # f =open('can.py','w',encoding='utf-8') #由于Python3的默认编码方式是Unicode,所以在写入文件的时候需要调用utf8,以utf8的方式保存,
这时pycharm(默认编码方式是utf8)才能正确读取,当读取文件时,文件是utf8格式,pycharm也是utf8,就不需要调用了。 # w = f.write('hello world') # print(w) #这里并不打印'hello world',只打印写入多少字符 ()内只能传入字符串 # f.close()
a模式
与w模式不同的是,a模式不会把原来内容清空,而是光标移到内容最后位置,继续写入新内容。比如在最后追加'hello world' # f =open('can.py','a',encoding='utf-8') #由于Python3的默认编码方式是Unicode,所以在写入文件的时候需要调用utf8,以utf8的方式保存,这时
pycharm(默认编码方式是utf8)才能正确读取,当读取文件时,文件是utf8格式,pycharm也是utf8,就不需要调用了。 # w = f.write('hello world') # print(w) #还是只打印写入多少字符 # f.close()
tell和seek
# tell:查询文件中光标位置 # seek:光标定位 #tell()和seek(0)指的都是字节, read( )括号内的数字,指的是字符。 # f = open('file.py','r') # print(f.tell()) #光标默认在起始位置 ,读是从0开始 # f.seek(10) #把光标定位到第10个字节之后 # print(f.tell()) #输出10 # f.close() # ---------------------- # f = open('file','w') # print(f.tell()) #先清空内容,光标回到0位置 # f.seek(10) # print(f.tell()) # f.close() # ----------------------r # f = open('file1','a') # print(f.tell()) #追加光标默认在最后位置 # f.write('哈哈') # print(f.tell()) #光标向后13个字符,仍在最后位置 # f.close()
truncate 截断
# 不能是r模式下执行, # w模式下,已经清空所有数据,使用truncate没有任何意义, # a模式下,截断指定位置后的内容。 # f = open('file','a') # f.truncate(6) #只显示6个字节的内容(6个英文字符或两个汉字),后面的内容被清空。
光标位置总结
# f = open('file', 'r') # print(f.read(6)) # 6个字符 read()括号内的数字是字符,字符是能看到的最小的单位。 # print(f.tell()) # 位置13字节,一个汉字三个字节 # f.close() # # f = open('file', 'r') # f.seek(6) # 6个字节 seek()括号内的数字是字节 # print(f.tell()) # f.close() # # f = open('file', 'a') # print(f.tell()) # 光标默认在最后位置 # f.write('你好 世界') # print(f.tell()) # 光标向后9个字节,一个汉字三个字节,仍在最后位置 # f.close() # # f = open('file', 'a', encoding='utf-8') # print(f.truncate(6)) # 由于需要光标定位位置,所以也是字节。只显示6个字节的内容(6个英文字母或两个汉字,一个汉字三个字节),后面的内容被清空。 # f.close()
另外3种模式:r+、w+、a+
# r +:读写模式,光标默认在起始位置,当需要写入的时候,光标自动移到最后 # # w +:写读模式,先清空原内容,再写入,也能够读取 # # a +:追加读模式,光标默认在最后位置,直接写入,也能够读取。 # f = open('can', 'a') # print(f.tell()) # 末尾6位置 # f.close() # # f = open('file', 'r+') # print(f.tell()) # 0位置can # print(f.readline()) # 读取第一行 # f.write('哈哈哈') # 光标移到末尾在6位置并写入 # print(f.tell()) # 15位置 # f.seek(0) # 光标移到0位置 # print(f.readline()) # 读取第一行 # f.close()
with语句
# 可以同时对多个文件同时操作,当with代码块执行完毕时,会自动关闭文件释放内存资源,不用特意加f.close() ,我们通过下面的示# 例体会with的用法和好处。 #(1)f2 = open('file2','w',encoding='utf8') #写入的时候必须加utf8 # f1 = open('file','r') # f1.close() # f2.close() # (2)with open('file','r') as f1,open('file2','w',encoding='utf8') as f2: #(1)和(2)是一样的作用
文件删除
# import os # os.remove() #删除文件 # os.rename('要被重命名的文件名','重命名后的文件名') #重命名文件