Python3 读取写入
读取txt
利用file
它长这个样子:
f = open('A-small-practice.in',encoding='utf-8')
for line in f:
print(line.strip())#去掉后面的换行符
这样打印会自动停止的。
f = open('A-small-practice.in',encoding='utf-8')
num = eval(f.readline().strip())#指针后移一行
li = []
for line in f:
li.append(line.strip())
一般算法题中,第一行是测试用例个数n,之后n行为测试用例。
利用generator
g=(x for x in open('A-small-practice.in',encoding='utf-8'))
它长这个样子:
如果你使用next(g)
,当所有行都读取过后,再next(g)
会抛出异常stopiteration。而如果你使用for循环,那么循环就会自己停止,所以这里就有一种优雅的读取txt文件的方法(一般算法题中,第一行是测试用例个数n,之后n行为测试用例):
g = (x for x in open('A-small-practice.in',encoding='utf-8'))
num = eval(next(g).strip())#去掉后面的换行符
li = []
for line in g:
li.append(line.strip())
with as写法
with open('A-small-practice.in',encoding='utf-8') as read:
while True:
line = read.readline().strip()#这里也有换行符,需要strip
if not line:
#这里line是空字符串''
break
else:
print(line)
在读取了所有行后,这个while循环并不会停止,所以需要自己break,在此之后,line都是空字符串’’。
next()
和readline()
方法几乎一样,但f.readline()
读取到最后如果没有数据会返回空,而f.next()
没读取到数据则会报错。
写入txt
上面的代码都没有指定文件读写模式,所以是默认的读模式open(file,'r')
。
代码 | 解释 |
---|---|
open(file) =open(file,'r') |
以读 模式打开文件 |
open(file,'r+') |
以读写 模式打开文件 |
open(file,'w') |
如果文件存在,先清空该文件;然后以写 模式打开文件 |
open(file,'w+') |
如果文件存在,先清空该文件;然后以读写 模式打开文件 |
open(file,'a') |
追加:以写 模式打开文件,然后将指针移动到末尾 |
open(file,'a+') |
追加:以读写 模式打开文件,然后将指针移动到末尾 |
open(file,'rb') open(file,'wb') open(file,'ab') |
b 组合使用,表示操作的是一个二进制文件 |
加了+
代表读写都可以;
file.close()
后才会将缓冲区数据写入到文件中,如果没写这句,在执行过程中,文件是不会写入数据的;
file.flush()
,当然也可以提前将缓冲区数据写入文件,但不关闭文件;
没有特别说明的,指针都是指向开头的。
open(file,'w')
和 open(file,'w+')
都是在open的时候就把文件清空了。
open(file,‘r+’)
f = open('test.txt','r+',encoding='utf-8')
f.write('one')
这里没有file.close()
,程序会直接执行完毕,但数据不会写入。
f = open('test.txt','r+',encoding='utf-8')
f.write('one')
file.close()
文件能写入,但由于指针指向开头,会从开头覆盖掉数据。
f = open('test.txt','r+',encoding='utf-8')
f.read()
f.write('one')
file.close()
f.read()
把整个文件内容读进一个字符串,自然也会将指针指向末尾。此时再write
,就是在末尾添加数据了。
格式化输出
print('today is %d mouth %d day'%(1,2))
print('{} {}'.format('hello','world')) # 不带字段
print('{0} {1}'.format('hello','world')) # 带数字编号
print('{0} {1} {0}'.format('hello','world')) # 打乱顺序
print('{a} {tom} {a}'.format(tom='hello',a='world')) # 带关键字