python3--文件读写
读写模式 | 是否可读 | 是否可写 | 文件不存在时 |
r | 是 | 否 | 报错 |
r+ | 是 | 是,覆盖写入 | 报错 |
w | 否 | 是,清空原内容 | 创建新文件 |
w+ | 是 | 是,清空原内容 | 创建新文件 |
a | 否 | 是,末尾追加写入 | 创建新文件 |
a+ | 是 | 是,末尾追加写入 | 创建新文件 |
上面是python3读写文件的几种模式:
前提:
1 from sys import argv 2 file_name = argv[1] 3 4 #在cmd中执行代码,需要输入: 5 >>> python py_open_file.py open_file.txt 6 7 则 argv接收到python后面的两个参数,argv[0] 是python后的第一个参数:py_open_file.py ; argv[1]接收的值是:open_file.txt
读:
1 #r只读模式 2 with open(file_name,'r') as f: 3 print(f.read()) 4 5 #r+可读可写 6 with open(file_name,'r+') as f: 7 f.write('r+写入') 8 f.seek(0) #将光标移动到文件首部 9 print(f.read())
写:
1 #w纯写入,清空原内容 2 with open(file_name,'w') as f: 3 f.write("这是w写入的内容") 4 #w+可读可写 5 with open(file_name,'w+') as f: 6 f.write("这是w+") 7 f.flush() #刷新内容,将写入的内容由内存刷新到磁盘中; 8 f.seek(0) #将光标移动到文件首部 9 print(f.read()) #读取文件全部内容
追加写:
1 #a追加模式,在文件末尾追加内容,如果文件不存在,则创建 2 with open(file_name,'a') as f: 3 f.write("\n这是a追加写入的内容;") 4 5 #a+可追加写可读模式 6 with open(file_name,'a+') as f: 7 f.write("\n这是a+的内容") 8 #f.flush() 9 f.seek(0) 10 print(f.read())
随机写入文件内容示例:
1 import random 2 3 with open(file_name,'w') as f: 4 f.truncate() #清空文件内容 5 for i in range(1,10): # range生成1到9的序列 6 s_name = 'num_' + str(i) 7 s_age = random.randint(14,19) #随机生成范围(14--19)的整数 8 ss = s_name + ',' + str(s_age) + '\n' 9 f.write(ss) #循环写入,模式可以是a,也可以是w
优化后的例子:
1 import random 2 3 with open(file_name,'w+') as f: 4 f.truncate() 5 for i in range(1,10): 6 s_name = 'num_' + str(i) 7 s_age = random.randint(14,19) 8 ss = s_name + ',' + str(s_age) + '\n' 9 f.write(ss) 10 f.flush() 11 f.seek(0) 12 print(f.read())
文件光标:
1 with open(file_name,'r') as f: 2 f.read() 3 print(f.tell()) #f.tell() 显示当前光标位置 4 f.seek(0) #移动光标到0的位置 5 f.seek(10) #移动光标到10的位置
在练习的过程中,会出现编码报错问题,各种尝试,如果报错,就尝试修改为如下:
1 with open(file_name,'r',encoding='utf-8') as f:
有时候添加了encoding='utf-8',读取或者写入的时候会中文乱码,则去掉试试。
注:
以前打开文件习惯性:
1 f = open(file_name,'w') 2 f.write("这是写入的内容。") 3 #这种写法需要手动关闭文件后再查看文件,才能看到内容 4 f.close() 5 6 #而with可以自动关闭文件 7 with open(file_name,'w') as f: 8 f.write("这是写入的内容。")