python学习之旅-08之文件操作

一,文件操作的基本用法

1,open表示打开一个文件

  f变量,操控hehe.txt文件句柄

  f = open('hehe.txt',mode = 'r',encoding = 'utf-8')

  #读取文件中的内容

  #read(n)读取n个字符

  conten = f.read(3)      #读取三个字符

  content = f.read()      #一次性全部读出来

  line = f.readline()      #读取一行数据

  print(line.strip())      #strip()去掉空白,空格\t   \n

  

  lst = f.readlines()      #一次性全部读取出来,返回的是列表

  print(lst) 

2.路径问题

  两种:

  a. 绝对路径(当文件路径是固定的时候)

    从磁盘根目录下去找。Windows下用的是c,d,e,f    linux: /user/bin/xxx

  b.相对路径()

    相对路径相当于当前程序所在的文件夹

    ../  表示上一层文件夹

3. 注意事项

  1)\n  \t等转义字符。有固定的含义的,出现在路径中就会造成麻烦,可多加\.。

推荐使用r

  f = open(r'E:\哈\t\n\hrhr.txt', mode = 'r',encoding = 'utf-8')   #路径前面加上r,意为静止路径中的转义

  print(f.read())

 

  2) f = open("hehe", mode="r", encoding="utf-8")

 

    #正常情况下不能用

    f.read()

    f.readlines()    #直接用容易造成内存溢出

  3)必须要掌握的

    恩建句柄是一个可迭代对象

    f = open('hehe'.mode = 'r',encoding = 'utf-8')

    for line in f:#读取文件中的内容。一行一行的读取,每次读取的内容交给变量 line 

    print(line.strip())

  4) r:只读

   w:只写,注意open打开时会清空文件,文件不存在时会创建文件

   a:append 在文件尾部追加内容,文件不存在是同样可以创建文件

  5)with编写,就可以不用使用f.close

    with open('log',mode='r+',encoding= 'utf-8') as obj:

 

二.文件操作  w  a

 

1、 mode="w"     # 假如文件不存在时,w可以帮我们创建文件

 

  f = open("taibai", mode="w", encoding="utf-8")

 

  f.write("太白\n")

 

  f.write("很白\n")

 

  f.write("特别白\n")

 

  f.close()

2、f = open("taihei", mode="a", encoding="utf-8")

  f.write("太黑了\n")

  f.write("很黑\n")

  f.write("特别黑\n")

  f.close()   

 

3、文本文件的赋值

  f1 = open(r"c:\日记本.txt", mode="r", encoding="utf-8")

  f2 = open(r"d\日记本.txt", mode="w", encoding="utf-8")

  for line in f1:  # 从f1中读取数据

    f2.write(line)  # 写入到 f2 中

  f1.close()

  f2.close()

三.文件操作之b  

  b- bytes   读取和写入的是字节,用来操作非文本文件(图片 音频 视频)

   rb   wb   ab

# 需要掌握的:

# 把胡一菲.jpg 从c盘复制到d盘,单纯的的从bytes 角度来复制的。适用于所有的文件

 

f1 = open(r"c:\胡一菲.jpg", mode="rb")

 

f2 = open(r"d:\胡二菲,jpg", mode="wb")

 

for line in f1:    # 分批量的读取内容

 

  f2.write(line)  #open() 出来的结果可以使用read或者write。

 

f1.close()

 

f2.close()

四.文件操作  +

r+:读写   w+:写读    a+:追加写读           r+b,  w+b,a+b

1.r+    

# 正常点的,可用的-------先读取内容,后光标跳到最后再写

 

f = open("person", mode="r+", encoding="utf-8")

 

content = f.read()

 

f.write("黄蓉")

# 坑 : 不论你读取多少内容。再次写入的时候都是在末尾(手动调光标可选定写入位置)

f = open("person", mode="r+", encoding="utf-8")

info = f.read(3)

f.write("辣眼睛")

print(info)

2、w+

f = open("person", mode="w+", encoding = "utf-8")  # 先清空然后再操作

f.write("你好,我叫巫妖王")

content = f.read()    # 写入东西后,光标在末尾,读取不到内容

print(content)

f.close()

3、a+ ,    #不论光标在何处,写入的时候都是在末尾

f = open("person", mode="a+",encoding="utf-8")

f.write("我叫李嘉诚")  # 默认写在末尾

print(content)

 

综上: r+ 、w+ 、a+ 都是后坑的地方,切记少用,注意神坑

五、光标

1、seek() 小试

# 文本信息: 一起小试牛刀

f.seek(3)  # 以字节为单位----移动三个字节

f.read(3)  # 以字符为单位,读取三个字符  

结果: 起小试牛刀

 

2、seek() 的应用

seek(参数1, 参数2)

参数1:表示是偏移量,移动多少个字节单位

参数2: 表示从什么位置进行偏移(0:开头  1:当前位置  2:末尾)

 

# 把光标移动到文件开头:seek(0)  #参数2 不写默认为0

# 把光标移动到末尾:  seek(0,2)

print(f.read(2))   # 读取两个字符

f.seek(0)  # 回到开头

print(f.read(2))   # 读取两个字符

 

3、tell()  # 返回当前光标位置

 

info = f.read(3)

print(info)

print(f.tell())  # 获取光标位置

 

4、truncate()  截断文件。慎用

 

posted @ 2020-03-23 10:23  DD欧尼  阅读(157)  评论(0编辑  收藏  举报