python之路-day08-文件操作

一、文件操作基本用法

1、

open 表示打开一个文件

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

 

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

#读取文件中的内容

# read(n) 读取n个字符

content = 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\hehe.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  在文件尾部追加内容,文件不存在时同样可以创建文件

 

 

二、 文件操作之 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("黄蓉")

print(content)

 

# 错误的示范

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

f.write("杨千嬅")   #默认直接写入的话,是从开头写入。 覆盖开头的内容

content = f.read()

print(content)

 

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

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("我叫李嘉诚")  # 默认写在末尾

 

综上: 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()  截断文件。慎用

 

 

六、文件修改

# 将文件中的"善良" 改为"sb"

import os  # 导入os模块

import time  # 导入时间模块

 

# with 语句的优点,自动关闭连接

with open("唐诗", mode="r", encoding="utf-8") as f1,\

  open("唐诗_副本",mode="w", encoding="utf-8") as f2:

  for line in f1:

    line = line.replace("善良","sb")

    f2.write(line)

time.sleep(5)

os.remove("唐诗")   # 删除源文件

time.sleep(5)

os.rename("唐诗_副本","唐诗")   # 把副本改名成源文件

 

 

七、 文件操作应用

 

文件内容:  fruit.txt

id  水果  价格  数量

1  苹果  5    50000

2  葡萄  7    60000

......

 

f = open("fruit.txt" , mode="r" , encoding="utf-8")

titles = f.readline().strip()    # 读取第一行,同时可以将光标移到第二行开头

title_lst = titles.split(",")  # ["id","水果","价格","数量"]

 

lst = []

for line in f:  # 光标开始从第二行读取

  dic = {}

  ll = line.strip().split(",")

  for i in range(len(title_lst)):

    dic[title_lst[i]] = ll[i]

  lst.append(dic)

f.close()

print(lst)

 

posted @ 2018-10-26 17:35  wenjie^_^  阅读(189)  评论(0编辑  收藏  举报