初始文件处理

一、初始文件处理(写文件)

"""
第一步:  找到文件

第二步:打开文件

第三步:操作:先读后写

第四步:关闭
"""
f = open("学习","w",encoding="utf-8")          #f是文件操作符 文件句柄  文件操作对象

# f2 = open("学习2","w",encoding="utf-8")
# f2.close()
# open打开文件是依赖操作系统提供的途径
# 操作系统有自己的编码,open在打开文件的时候默认使用的是操作系统的编码
# eg:win10之前用的GBK  mac、Linux使用的是utf-8
f.write("hello,world
")        #"
"是Python语法的换行符
f.write("123456")
f.write("00090900")             #如果在写文件的时候我们需要写数字也必须把数值转换成字符串
f.write("
assfffghghgdfgf")   #"
"换行符放前边也可以
f.write("
你好,世界")           #凡是涉及到储存读写,字符集用utf-8
f.write("
天气不错")

# print(f.writable())        #判断文件是否可写
# print(f.readable())      #判断文件是否可读

f.close()

# 找到文件详解:
#            文件与Py的执行文件如果是在相同路径下,直接用文件的名字就可以打开
#             文件与Py的执行文件如果是不在相同路径下,用绝对路径找到文件,文件的路径需要用取消转译的方式来表示:
#                        方法一(\):'C:\Users\Administrator\Desktop\s1_tmp.txt'
#                        方法二(r''):r'C:UsersAdministratorDesktops1_tmp.txt'
# f = open(r'C:UsersAdministratorDesktops1_tmp.txt','w',encoding='utf-8')
# f.write("哈哈哈哈")
# f.close()

# 关闭文件详解:
#               操作系统级别的关闭文件资源:f.close()             必须写
#               del f  主动释放一个Python程序内存中的变量         可用可不用  

二、初始文件处理(读文件)

#第一步:打开文件
# f = open('学习','r',encoding='utf-8')    两种方法打开文件都可
f = open('学习',encoding='utf-8')
#1.读文件的第一种方式:read方法,用read方法会一次性读出文件所以内容
# content = f.read()
# print("read:",content)
# 2.读文件的第二种方式:读一部分内容:用read(n),指定读取n个单位
                    # print(f.read(11))
#3.读文件的第三种方式:  f.readline()     是按照行读,每次执行就会往下读一行
                        #.strip()         是去掉空格、制表符、换行符
# content = f.readline()
# print(content)
# print("readline:",content.strip())
                    # content2 = f.readline()
                    # print(content2.strip())
                    # content3 = f.readline()
                    # print(content3.strip())
#4.读文件的第四种方式:   .readlines() ,返回的是列表, 将文件中的每一行作为列表中的每一项返回一个列表
# content = f.readlines()
# print("readlines:",content)


#第二步:读取文件:  5、读:这是最常用的方法
for l in f:
    print(l.strip())

# 第三步:关闭文件
f.close()

  

三、.strip()

'''
f = open('shoplist',encoding='utf-8')


i = []
for l in f:
    if l.strip():
        line = l.strip()
        goods_lst = line.split()
        goods_dict = {"name": None, "价格": None}
        goods_dict['name']=goods_lst[0]
        goods_dict['价格']=goods_lst[1]
        i.append(goods_dict)
print(i)
f.close()
'''


'''
#去除多层空格、制表符、换行符
for i in f:
    if i.strip():                    #如果成立代表有内容 只显示有内容的行
        print(i.strip())                
'''

  

四、打开文件的几种模式

#b: 图片、音乐、视频等任何文件
# 传输:上传、下载
# 网络编程
'''
f = open('学习','rb')
content = f.read()
print(content)
f.close()
'''

#追加可读     极少用


# f = open('shoplist','a+',encoding='utf-8')
#
# # f.write("
computer 6000 5")
# # f.write("
coke 120 5")
# # f.write("
perpie 333 5")
# print(f.readable())
# f.close()

#r+   可读可写
#  1.先读后写  写是追写
#   2.先写后读  从头开始写    (会从头开始覆盖)
# f = open('学习','r+',encoding="utf-8")
# # line = f.readline()
# # print(line)
# f.write("
0000000000000000000000000000")
# f.close()

#w+   可写可读 :一上来文件就清空 ,
# 1、尽管可读,但是读出来的内容是新写入的内容
#  2、 他的光标是在最后的  需要主动移动他的光标才可读
# f = open('学习','w+',encoding="utf-8")
# f.write("
ABC
")
# f.write("哈哈哈")
#
# f.seek(0)               # seek()  是指针  就是光标的位置
# print(f.read())
# f.close()


#a+    追加可读
# f = open('学习','a+',encoding="utf-8")
# f.write("
娃哈哈")
# f.seek(0)
# print(f.read())
# f.close()

#  一般情况下:文件操作,要么读  要么写;  很少会用到读写  写读同时用的
# 常用的:
#     r w a
#    rb  wb  ab    不需要指定编码


f = open('学习','rb')
content = f.read()

f.close()
print(content)
f2 = open('学习2','wb')
f2.write(content)
f2.close()

  

五、文件内的光标移动(.seek()   .tell())

f = open('学习','r+',encoding='utf-8')
# seek 光标移动到第几个字节的位置
# f.seek(0)                           #移动到最开始
# f.seek(0,2)                             #这个是移动到最末尾
# f.truncate(5)                           #从文件开始的位置只保留指定字节的内容
f.write("*合同法规定")
# content = f.readline()

# print(content.strip())
# print(f.tell())                          #tell()  告诉我们当前光标所在位置
# print(f.seek(4))                            #光标移动到三个字节的地方

content = f.read(1)   #读一个字符
print('***',content,'***')
content = f.readline()
print(content.strip())
print(f.tell())


f.close()

  

六、修改文件

'''
#文件的修改
#1.创建一个新文件
f2 = open('原文件.bak','w',encoding='utf-8')

#2.把原来的文件中的内容读出来
f = open('原文件',encoding='utf-8')
old_content = f.read()                 #原来的内容

#3.操作读出来的字符串,把字符串中的内容替换掉
new_content = old_content.replace("新","原来")
#4.把替换之后的内容写到新文件里
f2.write(new_content)
f.close()
f2.close()
#5.删除原文件,新文件重命名成源文件的名字
import os               #引入os模块
os.remove("原文件")    #删除文件
os.rename('原文件.bak','原文件')          #重命名    执行的是replace("老内容","新内容")
'''
'''
# 创建新文件
f2 = open('原文件.bak','w',encoding='utf-8')
f = open('原文件',encoding='utf-8')
for i in f:
    new_content = i.replace('原来','新')
    f2.write(new_content)
f.close()
f2.close()
import os
os.remove("原文件")
os.rename('原文件.bak','原文件')
'''

'''
#进阶例子
#1.创建一个新文件
f2 = open('原文件.bak','w',encoding='utf-8')
#2.把原来的文件中的内容读出来
f = open('原文件',encoding='utf-8')
count = 0
for line in f:
    if '原来' in line and count == 0:
        new_line = line.replace('原来','新')
        f2.write(new_line)
        count = 1
    else:
        f2.write(line)
f.close()
f2.close()
import os
os.remove('原文件')
os.rename('原文件.bak','原文件')
'''

# #with 操作文件  最常用方法之一
# with open('原文件',encoding='utf-8') as f:
#     # content = f.read()
#     # print(content)
#     for line in f:
#         if line.strip():
#             print(line.strip())




# with open('原文件',encoding='utf-8') as f,open('原文件.bak','w',encoding='utf-8') as f1:
#     for line in f:
#         new_line = line.replace('原来','新')
#         f1.write(new_line)
# import os
# os.remove('原文件')
# os.rename('原文件.bak','原文件')

'''
with open('原文件',encoding='utf-8') as f,open('原文件.bak','w',encoding='utf-8') as f1:
    for i in f:
        new_content = i.replace('新','原来')
        f1.write(new_content)
import os
os.remove('原文件')
os.rename('原文件.bak','原文件')
'''

#修改文件
    #read()
    #for循环的形式逐行修改
    #只修改一行的内容,其他不变 —— 扩展例子
#with语句 == 文件的打开和关闭
    #根据个人喜好