Python_day08_2018.7.11(文件操作)

一.初始文件操作

  使用open()函数.打开文件,获取文件句柄,并根据不同的模式进行相应的操作.打开方式的不同,可以进行的操作也是不同的.

 打开⽂文件的⽅方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使⽤用的是r(只读)模式

二.只读操作( r , rb )

r :    ----------------------只读模式-------------mode 对应的是类型      encoding 对应的是 编码类型,一般使用 utf-8 模式

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

content = f.read()

print(content)

f.close

rb:----------------------只读模式(b表示的是bytes)---------------

  读取出来的是bytes类型,!!!!!在 rb 模式下,不能选择encoding类型

绝对路径: 从磁盘的根目录开始一直都文件名

相对路径:在同一个文件夹下的文件.

 

读取文件的方法:

1.read()     将文件内容一次性全部提取出来

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

content = f.read()

print(content)           #一次性全部取出,所以有可能内存溢出

 

2.read( n )   读取几个字符,如果再次读取就从当前位置开始读取,不是从头开始读.

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

content = f.read(3)

print (content)

 

3.readline()   一次性读取一行数据   !!! 每一行取出的数据最后都有一个回车.

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

content = f.readline()

print(content)

 

4.readlines()    将每一行作为一个元素添加到一个列表中,类似与将群工部内容一次性读取出来.

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

lst = f.readlines()

print(lst)

for line in lst:

print(line.strip())

 

5.循环读写,每次读取一行内容并处理.所以不会出现内存溢出的可能.

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

for line in f:

print(line.strip)

 

三.写模式( w , wb )   !!!只写模式下.不可以读.

写的时候如果没有这个文件,则会创建这个.如果存在文件,则将原文件内容删除,然后再写入内容.

f = open("宝宝.txt",mode="w",encoding="utf-8")

f.write("金毛狮王")

f.flush()

f.close()

wb模式下:可以指定打开文件的编辑器,但是再写文件的时候必须将字符串转成utf-8

f = open("宝宝.txt",mode= "w",encoding="utf-8")

f.writer("金毛狮王".encode("utf-8"))

f.flush()

f.close()

 

四.追加( a , ab)    a-->append

追加就是将内容写到原文件的结尾.

f = open("宝宝.txt",mode= "a",encoding="utf-8")

f.write("麻花藤")

f.flush()

f.close()

 

五.读写模式( r ,r+b )

之前没有任何操作,write 会从头开始进行覆盖

如果之前进行过其他操作,write就是将内容跟到原文件的末尾.

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

content = f.read()

f.write("麻花藤")

print(content)

f.flush()

f.close()

 

六.写读( w , w+b )

先将原来的内容清空--->然后写入--->读取(读取内容为空)

f = open("宝宝.txt",mode="w+",encoding="utf-8")

f.write("哈哈")

content = f.read()

print(content)

f.flush()

f.close()

 

七.追加器  a+

  a+ 模式下,无论是先读还是后读,都是读不到数据

f = open ("宝宝.txt",mode="a+",encoding="utf-8")

f.write("麻花藤")

content = f.read()

print(content)

f.flush()

f.close()

 

八.其他相关操作

1.seek( n )  光标移动到第 n 个位置. -----n的单位是byte 字节

光标移到开头----seek(0)

光标移到末尾----seek(0,2)     seek(a,b)   b表示光标位置,如果b=0,移到开头,b=1当前位置,b=2光标移到末尾.     a表示在当前位置的偏移量.

 

2.tell()   使用tell()获取光标的位置

 

九.修改文件

方法: 将原来的文件内容取出来进行操作修改后,放入另一个文件中.

将旧文件删除==>将新文件名字修改为原来的名字.

 

import os

with open("吃的", mode="r", encoding="utf-8") as f1, open("吃的_副本", mode="w", encoding="utf-8") as f2:
    
for line in f1:
s = line.replace("菜", "肉")
f2.write(s)
os.remove("吃的") # 删除文件
os.rename("吃的_副本", "吃的") # 重命名文件


# 1,有如下文件,a1.txt,里面的内容为:
#
# 老男孩是最好的培训机构,
# 全心全意为学生服务,
# 只为学生未来,不为牟利。
# 我说的都是真的。哈哈
#
# 分别完成以下的功能:
# a,将原文件全部读出来并打印。

# f = open("a1.txt",mode="r",encoding="utf-8")
# lst = f.readlines()
# for line in lst:
# print(line.strip())

# b,在原文件后面追加一行内容:信不信由你,反正我信了。

# f = open("a1.txt",mode="a",encoding="utf-8")
# f.write("\n信不信由你,反正我信了.")
# f.flush()
# f.close()

# c,将原文件全部读出来,并在后面添加一行内容:信不信由你,反正我信了。

# f = open("a1.txt",mode="r+",encoding="utf-8")
# content = f.read()
# f.write("\n信不信由你,反正我信了.")
# print(content)

# d,将原文件全部清空,换成下面的内容:
#
# 每天坚持一点,
# 每天努力一点,
# 每天多思考一点,
# 慢慢你会发现,
# 你的进步越来越大。

# f = open("a1.txt",mode="w+",encoding="utf-8")
# f.write("""每天坚持一点,
# 每天努力一点,
# 每天多思考一点,
# 慢慢你会发现,
# 你的进步越来越大。""")
# content = f.read()
# print(content)
# f.flush()
# f.close()

# e,将原文件内容全部读取出来,
# 并在‘我说的都是真的。哈哈’这一行的前面加一行,‘你们就信吧~’然后将更改之后的新内容,写入到一个新文件:a1.txt。

# import os
# with open("a1.txt",mode="r",encoding="utf-8") as f1 ,open("a1的副本.txt",mode="a",encoding="utf-8") as f2:
# lst = f1.readlines()
# for line in lst:
# if line.strip() == "我说的都是真的。哈哈":
# f2.write("你们就信吧\n我说的都是真的。哈哈")
# else:
# f2.write(line)
# os.remove("a1.txt")
# os.rename("a1的副本.txt","a1.txt")



# 2,有如下文件,t1.txt,里面的内容为:
#
# 葫芦娃,葫芦娃,
# 一根藤上七个瓜
# 风吹雨打,都不怕,
# 啦啦啦啦。
# 我可以算命,而且算的特别准:
# 上面的内容你肯定是心里默唱出来的,对不对?哈哈
#
# 分别完成下面的功能:
# a,以r+的模式打开原文件,判断原文件是否可读,是否可写。

# f =open("t1.txt",mode="r+",encoding="utf-8")
# print(f.readable())

# b,以r的模式打开原文件,利用for循环遍历文件句柄。

# f = open("t1.txt",mode="r",encoding="utf-8")
# lst = f.readlines()
# for line in lst:
# print(line)


# c,以r的模式打开原文件,以readlines()方法读取出来,并循环遍历
# readlines(),并分析b,与c 有什么区别?深入理解文件句柄与# readlines()结果的区别。

# d,以r模式读取‘葫芦娃,’前四个字符。

# f = open("t1.txt",mode="r",encoding="utf-8")
# content = f.read(4)
# print(content)

# e,以r模式读取第一行内容,并去除此行前后的空格,制表符,换行符。

# f = open("t1.txt",mode="r",encoding="utf-8")
# str = f.readline()
# print(str.strip())

# f,以r模式打开文件,从‘风吹雨打.....’开始读取,一直读到最后。

# f = open("t1.txt",mode="r",encoding="utf-8")
# lst = f.readlines()
# count = 0
# while count < len(lst):
# if count >1:
# print(lst[count])
# count += 1
# else:
# count += 1

# g,以a+模式打开文件,先追加一行:‘老男孩教育’然后在从最开始将原内容全部读取出来。

# f = open("t1.txt",mode="a+",encoding="utf-8")
# f.write("\n老男孩教育")
# content = f.read()
# print(content)
# f.flush()
# f.close()
# f = open("t1.txt",mode="r",encoding="utf-8")
# for line in f:
# print(line.strip())

# h,截取原文件,截取内容:‘葫芦娃,葫芦娃,’

# f = open("t1.txt",mode="r+",encoding="utf-8")
# f.truncate(24)



# 3,文件a.txt内容:每一行内容分别为商品名字,价钱,个数。
#
# apple 10 3
# tesla 100000 1
# mac 3000 2
# lenovo 30000 3
# chicken 10 3
#
# 通过代码,将其构建成这种数据类型:
# [{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 并计算出总价钱。

# f = open("a.txt",mode="r",encoding="utf-8")
# lst1 = f.readlines()
# print(lst1)
# lst3 = []
# sum = 0
# for line in lst1:
# dic = {}
# lst2=line.strip().split(" ")
# sum = sum + int(lst2[1])*int(lst2[2])
# count = 0
# while count< len(lst2):
# if count ==0:
# dic["name"]=lst2[count]
# elif count ==1:
# dic["price"]=lst2[count]
# else:
# dic["amount"]=lst2[count]
# count += 1
# lst3.append(dic)
# print(lst3)
# print(sum)


# 4,有如下文件:a4.txt
#
# alex是老男孩python发起人,创建人。
# alex其实是人妖。
# 谁说alex是sb?
# 你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。
#
# 将文件中所有的alex都替换成大写的SB(文件的改的操作)。

# f = open("a4.txt",mode="r+",encoding="utf-8")
# lst = f.readlines()
# lst2=[]
# for line in lst:
# line = line.replace("alex","SB")
# lst2.append(line)
# print(lst)
# print(lst2)



# import os
# with open("a4.txt",mode="r",encoding="utf-8") as f1 ,open("a4的副本.txt",mode="a",encoding="utf-8") as f2:
# s = f1.read()
# ss =s.replace("alex","SB")
# f2.write(ss)
# os.remove("a4.txt")
# os.rename("a4的副本.txt","a4.txt")


# 5,文件a5.txt内容(升级题)
#
# name:apple price:10 amount:3 year:2012
# name:tesla price:100000 amount:1 year:2013
# .......
#
# 通过代码,将其构建成这种数据类型:
# [{'name':'apple','price':10,'amount':3},
# {'name':'tesla','price':1000000,'amount':1}......]
# 并计算出总价钱。



# f = open("a5.txt",mode="r+",encoding="utf-8")
# lst = f.readlines()
# lst3 = []
# sum = 0
# for line in lst:
# dic = {}
# lst1=line.split(" ")
# lst4 = lst1[1].split(":")
# lst5 = lst1[2].split(":")
# sum = sum + int(lst4[1])*int(lst5[1])
# for el in lst1:
# lst2=el.split(":")
# dic[lst2[0]]=lst2[1].strip()
# lst3.append(dic)
# print(lst3)
# print(sum)





# 6,文件a1.txt内容(升级题)
#
# 序号 部门 人数 平均年龄 备注
# 1 python 30 26 单身狗
# 2 Linux 26 30 没对象
# 3 运营部 20 24 女生多
# .......
#
# 通过代码,将其构建成这种数据类型:
# [{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},
# ......]


# f = open("a6.txt",mode="r+",encoding="utf-8")
# lst = f.readlines()
# lst3 = []
# for line in lst:
# # print(line)
# lst1=line.split(" ")
# lst2 = []
# dic = {}
# for el in lst1:
# if el == "":
# pass
# else:
# lst2.append(el.strip())
# dic["序号"] = lst2[0]
# dic["部门"] = lst2[1]
# dic["人数"] = lst2[2]
# dic["平均年龄"] = lst2[3]
# dic["备注"] = lst2[4]
# lst3.append(dic)
# print(lst3)


posted @ 2018-07-11 17:08  Anna_kc  阅读(334)  评论(0编辑  收藏  举报