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'))  # 带关键字
posted @ 2018-11-14 19:33  allMayMight  阅读(118)  评论(0编辑  收藏  举报