文件操作

r模式

#can文件内容为(德玛西亚
              你的剑就是我的剑)                   ‘
’ 为换行符
# 在只读模式下写入内容会报错。
# 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()
#结果显示:['德玛西亚
', '你的剑就是我的剑']

# 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('要被重命名的文件名','重命名后的文件名')       #重命名文件


 


原文地址:https://www.cnblogs.com/liusouthern/p/8111074.html