'''
1. 初识⽂文件操作
2. 只读(r, rb)
3. 只写(w, wb)
4. 追加(a, ab)
5. r+读写
6. w+写读7
. a+写读(追加写读)
8. 其他操作⽅方法
9. ⽂文件的修改以及另⼀一种打开⽂文件句句柄的⽅方式
打开文件的方式:r,w,a,r+,w+,a+,rb.wb,ab,r+b,w+b,a+b  默认使用的r(只读模式)

'''
#只读操作
# f=open('astronaut.txt',mode='r',encoding='utf-8')
# r=f.read()
# print(r)
# f.close()

#-------------------------------------------------
#python file方法
#file对象使用open来创建函数
#打开文件
# fo=open('astronaut.txt','wb')
# print('文件名为',fo.name)
# #关闭文件
# fo.close()
#--------------------------------------------------
#只读操作(r,rb)
#r操作
#---------------------------------------
#encoding编码集,根据文件的实际保存编码进行获取数据,更多的都是用utf-8
# f=open('astronaut.txt',mode='r',encoding='utf-8')
# r=f.read()
# print(r)
#---------------------------------------
#rb读取出来的数据是bytes类型,在rb模式下面,不能选择encoding字符集
'''
rb数据的作用
在读取非文本文件的时候. 比如读取MP3. 图像. 视频等信息的时候就需要用到rb. 
因为这种数据是没办法直接显示出来的.  在后⾯面我们文件上传下载的时候还会用到. 还有.
我们看的直播. 实际上都是这种数据
'''
# f=open('astronaut.txt',mode='rb')
# r=f.read()
# print(r)

# f=open('f:\\astronaut.3gp',mode='rb')     #路径\需要进行转义   rb打印视频文件
# r=f.read()
# print(r)
#-------------------------------------------------------------------------
'''
绝对路径:从磁盘根目录开始一直到文件名
相对路径:同一个文件夹下的文件. 相对于当前这个程序所在的文件夹而言. 
如果在同一个文件夹中. 则相对路径就是这个文件名. 如果在上一层文件夹. 则要../
'''
#读取文件的执行办法:
#read()将文件中的全部内容全部提取出来,弊端 占内存,文件过大,导致内存崩溃
# f=open('../as/哈哈',mode='r',encoding='utf-8')
# r=f.read(10)   #n打印多少个字符的个数
# print(r)
#read(n)读取n个字符的意思,需要注意的是,再次读取,那么会在当前位置继续去读,而不是从头读,如果使用的是rb,则读出来第n个字节
# file=open('../as/哈哈',mode='r',encoding='utf-8')
# r=file.read(2)
# r1=file.read(2)
# print('结果是',r)
# print('结果是',r1)
#----------------------------------------------------
#readline() 一次读一个行数据,注意readline()结尾,注意每次读取出来的数据都会有一个‘\n’所以我们要用strip()方法来去掉空格
# file=open('../as/哈哈',mode='r',encoding='utf-8')
# r=file.readline().strip()
# r1=file.readline().strip()
# r2=file.readline().strip()
# print(r)
# print(r1)
# print(r2)
#------------------------------------------------------
#readlines()
#readlines将每一行形成一个元素放到一个列表中,将所有的内容都读取出来,所以也是容易出现内存崩溃的问题,不推荐使用
# f=open('../as/哈哈',mode='r',encoding='utf-8')
# r=f.readlines()
# print(r)
# lst=f.readlines()              #将内容元素放到一个列表中,对列表进行迭代打印。
# print(lst)
# for line in lst:
#     print(line.strip())
#----------------------------------------------------------
#循环读取,这种方式是组好的,每次读取一行内容,不会产生内存溢出的问题
f=open('../as/哈哈',mode='r',encoding='utf-8')
for line in f:
    print(line.strip())
f.close()


#文件的追加模式
# f=open('小娃娃',mode='w',encoding='utf-8')
# f.write('黄河长江,我的中国信心')
# f.flush()   #刷新缓存
# f.close()   #关闭文件
#------------------------------------------
#追加模式

# f=open('小娃娃',mode='a',encoding='utf-8')  #a  追加模式
# f.write('马化腾的最爱')
# f.flush()  #刷新缓存
# f.close()  #关闭

# f=open('小娃娃',mode='ab')  #ab  追加模式
# f.write('李彦宏的最爱'.encode('utf-8'))
# f.flush()  #刷新缓存
# f.close()  #关闭
#-----------------------------------------
"""读写模式:对于读写模式,必须是先读,因为默认光标是在开头的,准备读取的,当读完了
再写入,所以我们以后使用频率最高的模式就是r+
必须记住:r+模式下,必须是先读取,然后再写入"""
# f=open('小娃娃',mode='r+',encoding='utf-8')
# content=f.read()
# f.write('美国,上海做买卖')
# print(content)
# f.flush()
# f.close()
'''
------------------------------------------
写读模式(w+,w+b)
先将所有的内容清空,然后写入,最后读取,但是读取的内容是空的,不常用
'''
# f=open('小娃娃',mode='w+',encoding='utf-8')
# f.write('哈哈牛是谁')
# content=f.read()
# print(content)
# f.flush()
# f.close()
#----------------追加读
#a+模式下,不论先读还是后读 都是读取不到数据的
# f=open('小娃娃',mode='a+',encoding='utf-8')
# f.write('马化腾')
# content=f.read()
# print(content)
# f.flush()
# f.close()
#b模式:rb,wb,ab   处理非文本文件,mode里面有b,encoding就不能给了
# f=open('e:/astronaut.jpg',mode='rb')  #这里不能写encoding
# s=open('f:/astronaut.jpg',mode='wb')
# for line in f:      #从e盘读取,
#     s.write(line)   #写入到f盘
# f.close()
# s.flush()
# s.close()
# r+ 光标在最前面
'''
不论你读取了多少内容,光标在哪里,写入的时候都是在结尾写入,除非上来就写入,这时
写入是在开头,最好用读写同事存在的模式
r+  读写模式,先读后写
w+  写读模式,先写后读
'''
f=open('小娃娃',mode='r+',encoding='utf-8')
# s=f.read(3)
# print(s)
# f.write('不养了 送人')
# f.write('葫芦娃')
s=f.read(2)
print(s)
f.write('火箭')
f.flush()
f.close()

 

 

1 '''
  2 Python操作文件
  3 找到文件,打开文件 f=open(filename)
  4 读,写,修改       f.read(100),f.read()读取全部,f.write(yourdate)
  5 保存 f.close
  6 
  7 文件打开模式,只能以一种模式操作文件
  8 r read
  9 w write   创建模式
 10 a append
 11 '''
 12 # f=open(file='F:/astronaut.txt',mode='w')    #file浏览器       mode模式
 13 # f.write('Alex, CEO,600\n')
 14 # f.write('astronaut, CTO,800\n')
 15 # f.close()
 16 
 17 # f=open(file='G:/astronaut.txt',mode='r+')
 18 # f.seek(5)    #seek走3个字节  光标移动处
 19 # print(f.readline())
 20 # print(f.readline())   #读一行
 21 # f.write('美国人殴打中国人2\n')
 22 # f.flush()
 23 # print(f.read())
 24 # print('-------分隔符--------')
 25 # data=f.read()   #读取所有
 26 # print(data)
 27 
 28 f=open(file='F:/install/pychram/test_function/venv/记事本',encoding='utf-8')
 29 
 30 # f.write('元帅,湖南,153,52,18010168875\n')
 31 # f.write('朱德,荆州,163,50,18010168885\n')
 32 # f.write('马云,杭州,143,72,18010168875\n')
 33 # f.write('马化腾,郑州,153,32,18010168875\n')
 34 # f.write('马超,东北,193,59,18010168875\n')
 35 # f.write('黄忠,辽宁,153,62,18010168875\n')
 36 # f.write('英国,东北,183,45,18010167575\n')
 37 # f.flush()
 38 #read  readline  readlines之间的区别
 39 #read
 40 # line=f.read(3)   #默认参数为空,是打印全部, 如果有参数3  就是从但当前位置读3各参数列表
 41 # print(line)
 42 # print(type(line))
 43 
 44 #readline用法
 45 # line=f.readline()     #readline  读取下一行
 46 # print(type(line))
 47 # print(f.readline())
 48 # # while line:
 49 # #     print(line)
 50 # #     line = f.readline()
 51 # f.close()
 52 
 53 #readlines用法
 54 # print(f.readlines())   #读取整个文件到一个迭代器里面,读取到一个list里面
 55 # line=f.readlines()
 56 # for i in line:
 57 #     print(i)    #迭代该版本.
 58 # f.seek(7)        #seek3个字节为一个字符     走多少字节
 59 # f=open(file='F:/install/pychram/test_function/venv/astronaut',encoding='utf-8',mode='r')
 60 # f.write('https://www.baidu.com\n')
 61 # f.write('astronaut')
 62 # f.flush()
 63 # print(f.tell())   #打印读取多少个数据,文件指针就向后移动多少个位置
 64 # print(f.seek()) #函数用于将文件指针移动至指定位置,
 65 # print(f.read(8))
 66 # print(f.tell())
 67 '''
 68 可以看到,当使用 open() 函数打开文件时,文件指针的起始位置为 0,
 69 表示位于文件的开头处,当使用 read() 函数从文件中读取 3 个字符之后,
 70 文件指针同时向后移动了 3 个字符的位置。这就表明,当程序使用文件对象读写数据时,文件指针会自动向后移动:
 71 读写了多少个数据,文件指针就自动向后移动多少个位置
 72 
 73 
 74 其中,各个参数的含义如下:
 75     file:表示文件对象;
 76     whence:作为可选参数,用于指定文件指针要放置的位置,该参数的参数值有 3 个选择
 77     :0 代表文件头(默认值)、1 代表当前位置、2 代表文件尾。
 78     offset:表示相对于 whence 位置文件指针的偏移量,
 79     正数表示向后偏移,负数表示向前偏移。例如,当whence == 0 &&offset == 3(即 seek(3,0) ),
 80     表示文件指针移动至距离文件开头处 3 个字符的位置;当whence == 1 &&offset == 5(即 seek(5,1) ),
 81     表示文件指针向后移动,移动至距离当前位置 5 个字符处。
 82 f.seek(5,0)文件开头
 83 f.seek(5,1)文件当前位置
 84 f.seek(5,2)文件末尾开始
 85 '''
 86 # f.close()
 87 f=open(file='F:/install/pychram/test_function/venv/astronaut',mode='rb')
 88 #判断指针的位置
 89 # print(f.tell())
 90 #读取一个字节,文件指针自动后移一个数据
 91 # print(f.read(3))
 92 # print(f.tell())
 93 #将文件指针从文件开头,向右移动到5个字符的位置
 94 f.seek(5)    #指针移动到5个字符
 95 print(f.tell())
 96 print(f.read(2))   #从光标第五位再读2个字符
 97 # f.close()
 98 #将文件指针从当前位置,向后移动到 5 个字符的位置 astronautspacestation
 99 f.seek(5,1)   #从上次输出结果光标位置开始,再次向右移动5个位置   5(确定光标)+2(再次读2个光标)+5(继续打印5个光标)
100 print(f.tell())
101 print(f.read(1))
102 # 将文件指针从文件结尾,向前移动到距离 2 个字符的位置
103 f.seek(-1, 2)
104 print(f.tell())
105 print(f.read(1))

 

混合模式(a+,w+,r+)

'''
w+  写读
r+  读写,能读能写,都是写在文件后面,跟追加一样
'''
#w+
# f=open('write_and_read','w+')
# f.write('hello world1\n')
# f.write('hello world2\n')
# f.write('hello world3\n')
# f.write('hello world4\n')
# f.write('hello world5\n')
# f.seek(0)
# print(f.readline())
# f=open('妹子的联系方式','r+')
# f.write('少妇,上海,172,25,13552668546\n')
# f.write('学生,北京,182,23,13552668546\n')
# f.write('护士,深圳,162,25,13552668546\n')
# f.write('空姐,天津,142,22,13552668546\n')
# f.write('白领,洛阳,172,25,13552668546\n')
# print(f.read())

#r+   追加
# f=open('write_and_read','r+')
# f.write('hello world11\n')
# f.write('hello world21\n')
# f.write('hello world31\n')
# f.write('hello world41\n')
# f.write('hello world51\n')
# # f.seek(0)
# print(f.readline())
#追加a+
# f=open('write_and_read','a+')
# f.write('hello 11\n')
# f.write('hello 21\n')

# #修改文件
# f=open('妹子的联系方式','r+')
# f.seek(3)
# f.write('astronaut')
#不占内存修改文件
f=open('妹子的联系方式','r')
f_new=open('妹子的联系方式_new','w')
old_str='洛阳'
new_str='美国'
for line in f:
    if '洛阳' in line:
        line=line.replace(old_str,new_str)    #replace替换字符串
    f_new.write(line)
f.close()
f_new.close()