https://www.w3cschool.cn/python/python-files-io.html # 菜鸟教程
一 .文件
1.什么是文件?
2、打开文件,读取文件,写入文件,关闭文件
myfile=open("路径",'打开方式')
打开方式:r,w,a...
myfile.read()读取全部文件内容
?英文数字空格 换行:--> 1个字节一个字符
空格后面为空 空格无效
汉字->utf-8 3个字节
myfile.read('字符个数')
读到空字符串就表示结束
open(name[, mode[, buffering]]):name指文件名,mode指模式参数,buffering指缓冲。
3、如果没有找到则会抛异常。
4、文件模式:mode
'r':读模式
'w':写模式
'a':追加模式
'b':二进制模式,比如声音剪辑或者图像则需要使用二进制模式。
'+':读、写模式。
5、缓冲:buffering。
控制着文件的缓冲,如果参数是0或者False,I / O输入输出就是无缓冲的
(所有的读写直接针对硬盘),如果是1或者True,I / O就是有缓冲的
(意思是使用内存代替硬盘,让程序更快,只有使用flush或者close时才会更新到硬盘)。
大于1的数字代表缓冲区的大小(单位字节),-1
或者任何负数代表使用默认的缓冲区大小。
==========================================
二、基本的文件方法:
1、读写:
fo=open('foo.txt','r+')
print(fo.name)
print(fo.closed)
print(fo.mode)
fo.write(R'Python is a great language.\nYeah its great!!\n'
txt=fo.read(5)
i=1
while(len(txt)>0):
print('第'+str(i)+'一次读取到的数据:',txt,'当前位置:',fo.tell())
i =i+1
if(i==20):
fo.seek(1,0) #设置偏移量 1:偏移几个字节2:0,1,2 开始 当前 结尾
txt = fo.read(5)
fo.close()
print('读取完毕')
# fo.write('12345')
# print(fo.softspace)
2.
tell方法:返回当前文件的位置。
3、随机访问:
seek(offset[, whence]):把当前位置(进行读写的位置)
移动到由offset和whence定义的位置。offset表示偏移量必须非负数
。whence:默认0表示偏移量从文件开头开始计算的。 whence设置为1
(相对于当前位置移动,此时偏移量offset可以是负数)或者2(相对于文件结尾移动)。
4、关闭文件:
(1)、可以使用try/finally语句:
try:
#write data to your file
finally:
#file.close()
(2)、使用with语句:
from __future__ import with statement
with open(“somefile”) as somefile
do something(somefile)
==========================================
二 .输入流
import os
重命名 复制 移动 删除 创建新目录
os.rename('foo.txt','pyspark.txt')
print('修改成功')
os.rename('pyspark.txt')
os.mkdir('输入流')
print('当前工作目录:',os.gercwd())
os.chdir('./输入流') #点代表当前目录
print('当前工作目录:'os,getcwd())
os.rmdir('输入流')
# 删除当前空文件夹 并尝试删除父级空文件夹
os.removedirs('./输入流/输入流|')
1.import os
os.rename("旧文件名","新文件名")
2.创建文件夹
os.mkdir("")
3.删除文件夹
os.rmdir("")
os.getcwd() #得到当前路径
os.listdir("./") #获取当前路径下的所有文件,返回一个文件集
os.chdir(文件夹)
# 批量重命名
foo=open(R'C:\Users\郝文杰\新建文本文档.txt','r+',encoding='utf-8');
# 循环读 以行为单位
text=foo.read()
while len(text)!=0:
print(text,end='')
text = foo.readline()
# print(text)
==========================================
fjava = open(R'C:\Users\郝文杰\Desktop\新建文本文档.txt','w+',encoding='utf-8');
lines = foo.readlines()
print(lines)
for li in lines:
fjava.write(li.replace('python','java'))
# print(li)
# print(type(lines))
# print(len(lines))
fjava.close()
foo.close()
print('复制 并替换完毕')
==========================================
三 .类似爬虫 xml
from urllib import request
# 请求打开一个url
response=request.urlopen('http://marvel.mtime.com/')
# 在本地创建一个文件
xml = open('ptthon_xml.html','w+',encoding='utf-8')
# 把服务器的 响应 处理
html=response.read()
xml.write(str(html.decode('utf-8')));
print('读取完毕')
==========================================
四 .xml文档
准备一份XML格式的文件:
巧妇难为无米之炊,需要进行解析,首先必须有一个XML文件,
本篇文章采用官方API示例中的XML文档,示例代码如下:
<?xml version="1.0" encoding="utf-8" ?>
<data>
<country name="Liechtenstein">
<rank>1</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank>4</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/>
</country>
</data>
<!--
命名规范 见名知意
{'Liechtenstein':[{rank:1},{'yeatr':2008},{name:'Austria'}]}
-->
如下操作:
import xml.etree.ElementTree as ET
'''
tag,即标签,用于识别该元素表示那种数据,即APP_KEY
attrib,即属性,用Dictionary形式保存,即{'channel'='CSDN'}
text,文本字符串,可以用来存储一些数据,即hello123456789
'''
XML文件格式介绍:
1.先加载文档到内存里 形成一个倒桩树结构
tree = ET.parse('mingming.xml')
2.获取根节点
root = tree.getroot()
minging={}
print('tag:',root.tag,'attrib',root.attrib,'text:',root.text)
for ele in root:
# print('tag:', ele.tag, 'attrib', ele.attrib, 'text:', ele.text)
value=[]
for e in ele:
# print('tag:', e.tag, 'attrib', e.attrib, 'text:', e.text)
if e.text is None:
value.append()
else:
value.append({e.tag:e.text})
minging[ele.append['name']]=value
print(minging)
nodes=root.findall('country')
for node in nodes:
if node.attrib['name']=='Liechtenstein':
root.remove(node)
break
root.write('minging.xml')
print('删除成功')
1.查找指定的子节点:
2.删除指定的节点以及保存
代码如下:
import xml.sax
class MoveHandler(xml.sax.ContentHandler):
def __init__(self):
self.CurrentData=''
self.type=''
self.format=''
self.year=''
self.rating=''
self.srars=''
self.description=''
def startElement(self, tag, attrs):
self.CurrentData=tag
if tag=='movie':
print('*****movie*****')
title=attrs['title']
print('title:',title)
def characters(self, content):
if self.CurrentData=='type':
self.type=content
elif self.CurrentData=='format':
self.format=content
elif self.CurrentData=='ycar':
self.year=content
elif self.CurrentData=='rating':
self.rating=content
elif self.CurrentData=='sraes':
self.stars=content
elif self.CurrentData=='description':
self.description=content
def endElement(self, name):
if self.CurrentData=='type':
print('type:',self.type)
elif self.CurrentData=='format':
print('format:',self.format)
elif self.CurrentData=='year':
print('year:',self.year)
elif self.CurrentData=='rating':
print('rating:',self.rating)
elif self.CurrentData=='stars':
print('stars:',self.stars)
elif self.CurrentData=='description':
print('description:',self.description)
# 清空 缓冲区
self.CurrentData=''
if __name__ == '__main__':
# 1.create an XMLReader
parser= xml.sax.make_parser()
# 2.namepsaces 工作目录 工作空间 命令空间
parser.serFeaure(xml.sax.handler.feature_namespace_prefixes,0)
hadler=MoveHandler()
# 覆盖其原来的ContextHandle
parser.setConrexHandler(hadler)
parser.parse('move.xml')
==========================================
==========================================
==========================================
==========================================