1.使用w或者w+打开一个文件时,open()函数会自动清空文件内容
2.当使用w,w+,r,r+时打开一个不存在的文件,会自动创建文件
3.缓冲问题:
由于有缓冲区,我们写的内容先送入缓冲区,然后在于内存打交道,反过来一样,
如果想直接写道内存可以用:f.flush方法或者open(filename [, access_mode] [,buffering])将第三个参数设置为0或者False,如果时1或者
True就是带缓冲区,如果大于1则指点是缓冲区的大小,负数者是默认大小
安全的打开一个文件方式:
# 作者:薛志军
f = open('Name', 'r', True )
try:
while True:
ch = f.read(1) # 每次读取一个字符
if not ch: break # 如果没有读取到文件数据,就跳出循环break
print(ch, end=' ')
finally:
f.close()
open()打开程序是总是使用的当前操作系统的字符集,windows上总是用的GBK字符集
如果要使用的的文件与当前操作系统的字符集不匹配的时候:
1.使用二进制读取,然后使用decode()方法恢复成字符串
eg: F = open('read_test.py','rb','True')
print(F.read().decode('utf-8'))
F.close()
2.利用open函数通过参数encoding参数指定字符集:
eg:
f = F = open('read_test.py','r','True','utf-8')
while:
ch = f.read(1)
if not ch:break
print(ch,end = '')
f.close
按行读取:
1.readline([n]) 读取这一行的n个内容
2.readlines()读取所有的行,返回的是个列表,每个元素是每一行,使用可利用这点对文件进行列表中的操作
eg:
f = open('read_test.py','r',True,'utf-8')
for line in f.readlines():
print(line,end = '')
f.close()
但是当文件很大时会大量消耗内存,其实文件本身就是可遍历的:
eg:
f = open('read_test.py','r',True,'utf-8')
for line in f:
print(line,end = '')
f.close()
也可以利用list()把文件转换成列表:print(list(open('read_test.py','r',True,'utf-8')))
使用linecache模块随机读取行数,指定使用UTF-8字符集,也可以指定读取第几行的内容
eg:
import linecache
print(linecache.getline('文件的一些基础内容',1))
sys.stdin的一些基础操作:sys.stdin时类文件对象,可以利用这个获取用户的键盘输入,sys.stdout还可以实现输出到显示屏上:
eg:
import sys
for line in sys.stdin:
print('用户输入:', line, end=' ')
sys.stdout还可以实现输出到显示屏上,可以利用这个打印进度条:
import sys
import time
for i in range(50):
sys.stdout.write('#')
sys.stdout.flush()
time.sleep(0.5)
sys.stdin可以用来读取某个命令,此时就需要管道输入:前一个命令的输出,当成下一个命令的输入:cmd1|cmd2|。。。
seek(n) 就是从当前位置将指针后移n位置
tell()判断指针的位子