读写行
readline():会从文件中读取单独一行,换行符为\n,readline方法如果返回一个空字符串,说明已经读取到最后一行。
readlines()方法可以传入参数,当传入的数值小于等于列表中一个字符串的长度值时,该字符会被读取
path='C:/Users/Administrator/Documents/test.txt'
f_name=open(path,'w')
str_list=['hello world!\n welcome!\n welcome!\n']
print('write length',f_name.writelines(str_list))
f_name=open(path,'r')
print('read result',f_name.read())
f_name=open(path,'r')
print('readlines result',f_name.readlines())
#关闭文件
path='C:/Users/Administrator/Documents/test.txt'
with open(path,'w')as f:
f_name=open(path,'w')
print('write length:',f_name.write('hello world'))
#文件重命名 文件名需要带上绝对路径
import os
path='C:/Users/Administrator/Documents/test1.txt'
os.rename('C:/Users/Administrator/Documents/test1.txt','C:/Users/Administrator/Documents/test2.txt')
#删除文件 os.remove(file_name) 文件名需要带上绝对路径
import os
try:
print('remove result:',os.remove('C:/Users/Administrator/Documents/test2.txt'))
except Exception:
print('file not found')
对文件内容进行迭代
#文件内容进行迭代
path='C:/Users/Administrator/Documents/test2.txt'
f_name=open(path,'w')
print('write length:',f_name.write('hello'))
f_name=open(path)
c_str=f_name.read(1)
while c_str:
print('read str is :',c_str)
c_str=f_name.read(1)
#优化代码
path='C:/Users/Administrator/Documents/test2.txt'
f_name=open(path)
while True:
c_str=f_name.read(1)
if not c_str:
break
print('read str is:',c_str)
f_name.close()
#按行进行迭代
f_name=open(path)
while True:
line=f_name.readline(1)
if not c_str:
break
print('readline is:',line)
f_name.close()
#使用fileinput实现懒加载式迭代
#read和readlines方法不带参数时读取文件内容加载到内存中,当文件很大时会占用太多内存
#使用for循环,则称为懒加载式迭代,只读取实际需要的文件部分
import fileinput
for line in fileinput.input(path):
print('line is :',line)
#该例子的文件打开和关闭操作封装在input内部。
#对str操作的StringIO函数
from io import StringIO
io_val=StringIO()
io_val.write('hello')
print('say:',io_val.getvalue())#getvalue()用于获得写入后的str
#对str操作的StringIO函数
from io import StringIO
io_val=StringIO('hello world!\nwelcome\n')
while True:
line=io_val.readline()
if line=='':
break
print('line value:',line.strip())
序列化和反序列化:
在程序运行的过程中,所有的变量存在内存中过,我们把变量从内存中变成可存储的或可传输的过程称为序列化。
反之,把变量内容从序列化的对象重新读到内存中称为反序列化。
序列化是指将数据结构或对象转换成二进制串的过程。
#pickle.dump(obj,file,[,protocol])
import pickle
d=dict(name='xiaomi',num='1010')
print(pickle.dumps(d))#pickle.dumps()方法把任意对象序列转化成bytes,然后写入文件。
#pickle.dump()方法是把任意对象序列转化成bytes,然后写入对象中。
#pickle.dump(obj,file,[,protocol])
import pickle
d=dict(name='xiaomi',num='1010')
print(pickle.dumps(d))
#程序
try:
f_name=open('C:/Users/Administrator/Documents/test2.txt','wb')
pickle.dump(d,f_name)
finally:
f_name.close()
调试:repr函数
制表符、换行符和空格都是看不见的
str_val='a 2\t 3\n 4 5'
print(str_val)
print(repr(str_val))#把字符原本输出,方便调试