三.python 高级内容 ------文件

 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')
==========================================
==========================================
==========================================
==========================================
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值