# data = open('nothing_on_you.txt', encoding='utf-8').read()f = open('nothing_on_you.txt', 'r', encoding='utf-8') # 只读data = f.read()data2 = f.read()print(data, '-------------', data2)# r 模式读文件内容默认从第一行开始读# 第二次赋值给data2时会从最后一行开始,所以data2是空的,简直无fuck说f = open('nothing', 'w', encoding='utf-8') # 写f.write('---> bruno mars')# w 模式相当于shell中的 >f = open('nothing_on_you.txt', 'a', encoding='utf-8') # 追加f.write('\n+++> bruno mars')# a 模式相当于shell中的 >>f.readline() # 读取一行f.readlines() # 读取所有行变成一个数组# 循环打印每一行,第十行不输出,用其内容代替# low loop 会一次读取所有行到内存,文件过大时性能受影响for index, line in enumerate(f.readlines()): if index == 9: print('===========================') continue print(line.strip())# high bigger loop 一次只读一行到内存,不管多大的文件都是high performancecount = 0for line in f: count += 1 if count == 11: print('-----------------------') continue print(line) f.close() # 在python中打开一个文件后操作完了都要有关闭动作f = open('nothing', 'r', encoding='utf-8')print(f.tell()) # 读第一个字符的指针(下标)0print(f.readline())print(f.read(5)) # 读5个字节print(f.tell()) # 这会读到第二行的第六个字节的指针(下标)f.seek(0) # 回到指定指针位置print(f.tell()) # 这里就会打印第一个字符位置print(f.encoding) # 当前字符编码print(f.name) # 文件名print(f.seekable()) # 判断文件是否能seek (设备文件与tty是不能seek的)print(f.readable()) # 判断文件是否可读f.flush() # 将内存的数据写入磁盘# 进度条import sys, timefor i in range(10): sys.stdout.write('#') # 输出到屏幕 sys.stdout.flush() # 将输出实时显示到屏幕,不要缓存再一起输出 time.sleep(0.1) # 相当于shell sleepf = open('nothing', 'r+', encoding='utf-8')# r+ 可读可写(追加)# f.truncate(10) # 截取文件前10个字符(在文件中只保留前10个字各个字符,其它的会被截掉)# print(f.read()) # 此时文件里只有前面10个字符print(f.readline())print(f.readline())f.write('hello \n') # 这种模式下内容(不管你seek到哪)永远会追加到文件最后面print(f.readline())f.close()f1 = open('nothing1', 'w+', encoding='utf-8')# w+ 可写可读f1.write('---------1---------\n')f1.write('---------2---------\n') # 写入两行(加上换行第行20个字符)print(f1.read())f1.seek(0) # 跳到文件开头print(f1.tell())f1.write('============\n') # 再写入一行(加上换行13个符),这一行便会覆盖从文件第一个字符开始到新写入的字符串长度的字符# 文件内容会如下:如果新写入的行字符数比原先第一行要多,那么第一行的字符都会被覆盖# 就好比硬盘里原本写着有100个字符,seek到哪再写入就会从哪里开始覆盖原先的字符,写入多少就覆盖多少# 例: 写有123456789 seek到3的位置再写 abc ,内容就会变成:1234abc89 ;# seek到4的位置再写 HelloWorld ,内容就会变成:12345HelloWorld# 不seek,接着写入 adidas ,内容就会变成:123456789adidas# ============# -----# ---------2---------f1.close()f2 = open('test', 'rb') # 读二进制文件(读二进制不需要encoding)f2 = open('test', 'wb') # 写二进制f2.write('HelloWorld'.encode()) # 写二进制就要先转成二进制f2 = open('test', 'ab') # 追加二进制'''# 基本操作f = open('lyrics') # 打开文件first_line = f.readline()print('first line:', first_line) # 读一行print('我是分隔线'.center(50, '-'))data = f.read() # 读取剩下的所有内容,文件大时不要用print(data) # 打印文件f.close() # 关闭文件# 打开文件的模式有:# r,只读模式(默认)。# w,只写模式。【不可读;不存在则创建;存在则删除内容;】# a,追加模式。【可读; 不存在则创建;存在则只追加内容;】# # "+" 表示可以同时读写某个文件# r +,可读写文件。【可读;可写;可追加】# w +,写读# a +,同a# # "U" 表示在读取时,可以将 \r \n \r\n自动转换成 \n (与r或r + 模式同使用) 比如:在unix上读windows上的文件# rU # r + U## "b" 表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)# rb# wb# ab