'''
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()