Python中的文件和IO

150 阅读1分钟

文件打开

  • 用于创建、读取、更新和删除文件的函数
  • open
  • 打开文件的4种模式(r,a,w,x)
  • 处理模式:二进制、文本

文件读取

  • read
  • readline
  • close

代码练习

打开文件准备读入数据
f = open('键盘输入.txt',mode='rt', encoding='utf-8') 

read()    读数据,一次读取全部数据
s = f.read()

read(n)   读取n个字符,从当前文件读取指针开始读
s = f.read(10) 
print(s)

seek(n)   文件读取指针后移n个字节,默认从文件起始位置开始
f.seek(8) 
s = f.read(5)
print(s) 

readlines()   读取全部数据,返回列表
ss = f.readlines() 
print(ss) 

readline()    读取1行
s = f.readline()
print(s) 
s = f.readline()
s = f.readline()
s = f.readline()
s = f.readline()
s = f.readline()
如果到达文件末尾,返回空字符串
print(s+"<",len(s))  

tell() - 当前文件指针的位置
print(f.tell())

读文件全被内容,一行一行读
while True:
    s = f.readline()
    if s=='':
        break
    print(s,end='')

print(f.tell())

关闭文件
f.close()

文件写入

  • 写入已有的文件
  • 创建新文件

代码例子

写文件

mode - 文件打开模式
r   -   读 read
w   -   写 write
t   -   字符操作

encoding - 字符编码,常用utf-8   

打开文件准备写入字符
f = open('学生.txt',mode='w',encoding='utf-8') 

写入数据
f.write("Hello 你好!")
f.write("Hello 你好!")
f.write("Hello 你好!")

f.writelines("Hello 您好!\n")
f.writelines("Hello 您好!\n")
f.writelines("Hello 您好!\n")

f.writelines(["Hello 你好!","Hello 你好!","Hello 你好!"])

关闭文件
f.close()   

读写

f = open('键盘输入.txt',mode='a',encoding='utf-8')

while True:
    s = input("请输入:\n")
    if s=='#':
        break 
    f.write(s)
    f.write("\n")  
    # 刷新
    f.flush() 

关闭文件
f.close()

字节操作

字节操作
f = open("学生.txt",mode='wb')  
f.write(b'hello')       b - 把字符串转成字节
f.close()

删除文件

  • os.path.exists
  • rmdir

json文件

import json
user={'name':'zhang','age':20} 

dumps()     把python对象转成JSON字符串
s = json.dumps(user)
print(s,type(s)) 

loads()     把JSON字符串转成python对象
y = json.loads(s)
print(y['name'])

f=open('测试.txt','w',encoding='utf-8') 
dump()     python对象写入json文件
json.dump(user,f) 
f.close()

f=open('测试.txt','r',encoding='utf-8') 
load()     读取json文件,转成python对象
x = json.load(f) 
print(x,type(x)) 
f.close() 

pickle

import pickle 

lst=["java","python","web"] 
f = open("测试pickle.txt",mode='wb') 
dump()     把python对象序列化成字节保存至二进制文件
pickle.dump(lst,f) 
f.close()

f = open("测试pickle.txt",mode='rb') 
load()     读取二进制文件反序列化成python对象
lst2 = pickle.load(f) 
print(lst2,type(lst2))   
f.close()

IO

sep - 分隔符,默认值是空格
print("hello",123,sep=',') 

user={'name':'zhang','age':20} 
print(user) 

% 格式化输出
print('%(name)s今年%(age)d岁了' % user)

print('%s今年%d岁了'%('小明',18))  

print('% 10d'%12)  # '        12'

print('%010.2f' % 12.34567)  #'0000012.35'


format 格式化输出
print('{}今年{}岁了'.format('小明',18))  
print('{name}今年{age}岁了'.format(age=18,name='小明'))  
print('{}今年{}岁了'.format(18,'小明'))  

print('{name}今年{age}岁了'.format(**user)) 

lst = ['lisi',22]
print('{0[0]}今年{0[1]}岁了'.format(lst))   # 0[0]相当于lst[0]

print('{num:*^#16x}'.format(num=199)) 

print('{:>#8b},{:>#8o},{:>#8x}'.format(9,9,9)) 

print("{0:.2f},{0:e},{0:.2%}".format(30.1415926525))