您的位置:新葡亰496net > 奥门新萄京娱乐场 > 新葡亰496netTXT文本存款和储蓄,Python文件管理

新葡亰496netTXT文本存款和储蓄,Python文件管理

发布时间:2019-07-21 20:32编辑:奥门新萄京娱乐场浏览(70)

    将数据保存到TXT文本的操作非常简单,而且TXT文本几乎兼容任何平台,但是这有个缺点,那就是不利于检索。所以如果对检索和数据结构要求不高,追求方便第一的话,可以采用TXT文本存储。本节中,我们就来看下如何利用Python保存TXT文本文件。

    芝麻HTTP:TXT文本存储,芝麻txt文本存储

    将数据保存到TXT文本的操作非常简单,而且TXT文本几乎兼容任何平台,但是这有个缺点,那就是不利于检索。所以如果对检索和数据结构要求不高,追求方便第一的话,可以采用TXT文本存储。本节中,我们就来看下如何利用Python保存TXT文本文件。

    要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符,标示符'r'表示读。

    一、open模式

    文件是日常编程中常用的操作,通常用于存储数据或应用系统的参数

    语法:

           open(filename,mode)

    参数:

           filename:要访问的文件名

           mode:打开文件的模式

    模式

    说明

    r

    以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

    w

    打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    a

    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

    rb

    以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

    wb

    以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    ab

    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

    r

    打开一个文件用于读写。文件指针将会放在文件的开头。

    w

    打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    a

    打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

    rb

    以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

    wb

    以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    ab

    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

    Python第五天   文件访问    for循环访问文件    while循环访问文件   字符串的startswith函数和split函数  linecache模块

     

    目录

    Pycharm使用技巧(转载)

    Python第一天  安装  shell  文件

    Python第二天  变量  运算符与表达式  input()与raw_input()区别  字符编码  python转义符  字符串格式化

    Python第三天 序列  5种数据类型  数值  字符串  列表  元组  字典

    Python第四天   流程控制   if else条件判断   for循环 while循环

    Python第五天   文件访问    for循环访问文件    while循环访问文件   字符串的startswith函数和split函数

    Python第六天   类型转换

    Python第七天   函数  函数参数   函数变量   函数返回值  多类型传值    冗余参数   函数递归调用   匿名函数   内置函数   列表表达式/列表重写

    Python第八天  模块   包   全局变量和内置变量__name__    Python path

    Python第九天  面向对象  类定义   类的属性    类的方法    内部类   垃圾回收机制   类的继承 装饰器

    Python第十天   print >> f,和fd.write()的区别    stdout的buffer  标准输入 标准输出  标准错误   重定向 输出流和输入流

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函数   生成器  walk模块   hashlib模块

    Python第十二天     收集主机信息     正则表达式  无名分组   有名分组

    Python第十三天   django 1.6   导入模板   定义数据模型   访问数据库   GET和POST方法    SimpleCMDB项目   urllib模块   urllib2模块  httplib模块  django和web服务器整合  wsgi模块   gunicorn模块

    Python第十四天 序列化  pickle模块  cPickle模块  JSON模块  API的两种格式

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fabric模块  

     

     

    注意:python里windows的路径要写成 /

    f = open('F:/a.txt', 'a')  #以写的方式打开
    

     

     

     

    Python文件访问

     

    1、内置函数 open

     

    open
    访问模式    说明
    r    以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
    w    打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    a    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    rb    以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
    wb    以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    ab    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    r     打开一个文件用于读写。文件指针将会放在文件的开头。
    w     打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    a     打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    rb     以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
    wb     以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    ab     以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
    with open :python2.6才有的方法,python2.5没有,用with open,退出with open代码块之后的代码不需要显式fd.close()

    若不存在会创建新文件的打开方式:a,a ,w,w
    r :可读可写,若文件不存在,报错,r 进行覆盖写

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #__author__="huazai"
    """
    pycharm 使用指南
    Date:2016.08.12
    """
    
    with open('/proc/meminfo') as fd:
        for line in fd:
            if line.startswith('MemTotal'):
                total = line.split()[1]
                continue
            if line.startswith('MemFree'):
                free = line.split()[1]
                break
    
    print "free:%.2f" % (int(free) / 1024.0)   'M'
    print "total:%.2f" % (int(total) / 1024.0)   'M'
    

     

     

    文件的方法
    fd.close():不执行fd.close(),python程序退出的时候也会close文件
    fd.read()
    fd.readline()
    fd.readlines() :返回一个列表,每个元素都会加上一个换行符n
    next():一行一行读取
    fd.write()

     

     

    for循环访问文件
    第一种 readlines全部把文件内容读到内存

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #__author__="huazai"
    """
    pycharm 使用指南
    Date:2016.08.12
    """
    
    with open('C:UsersAdministratorDesktopmRemoteNGmRemoteNG-Portable-1.69CREDITS.TXT') as fd:
        for line in fd.readlines():
            print line,
    

     


    第二种 一行一行的读到内存 比较节省内存

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #__author__="huazai"
    """
    pycharm 使用指南
    Date:2016.08.12
    """
    
    with open('C:UsersAdministratorDesktopmRemoteNGmRemoteNG-Portable-1.69CREDITS.TXT') as fd:
        for line in fd:
            print line
    
            if fd.next().startswith('VncSharp'):
                break
    

    这里的fd是一个对象,有fd.next()方法,是显示文件下一行,那么for i in fd就相当于一直在执行fd.next()方法,直到文件结束

     

     

     

    2、codecs模块的open函数

    import codecs
    fw = codecs.open('test1.txt','a','utf-8')
    fw.write(line2)
    

     或

    import codecs
    
    with codecs.open('3.txt', 'rb', 'utf-8')  as fd:
        a=fd.readline()
        print a
    

     

     

     

    #-*- encoding: gb2312 -*-
    import codecs, sys
    
    # 用codecs提供的open方法来指定打开的文件的语言编码,它会在读取的时候自动转换为内部unicode
    bfile = codecs.open("dddd.txt", 'r', "big5")
    #bfile = open("dddd.txt", 'r')
    
    ss = bfile.read()
    bfile.close()
    # 输出,这个时候看到的就是转换后的结果。如果使用语言内建的open函数来打开文件,这里看到的必定是乱码
    print ss, type(ss)
    

     

    while循环访问文件

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #__author__="huazai"
    """
    pycharm 使用指南
    Date:2016.08.12
    """
    
    with open('C:UsersAdministratorDesktopmRemoteNGmRemoteNG-Portable-1.69CREDITS.TXT') as fd:
        while True:
            line = fd.readline()
            print line,
            if not line:
                break
    

     

     

    字符串的startswith函数和split函数

    startswith()函数:匹配字符串中的行,完全匹配,不能模糊匹配
    split()函数:切割字符串,默认以空格为分隔符
    isdigit()函数:判断字符串是否是数字

    string.digits函数:返回数字0123456789

     

     

     

    #!/usr/bin/env python
    
    import os
    import sys
    import string
    
    def isNum(s):
        for i in s:
            if i in string.digits:
            if i.isdigit():
                continue
            else:
                return False
        return True
    
    
    if  isNum(sys.argv[1]):
        print sys.argv[1]
    

     

     

    In [5]: a.isdigit()
    Out[5]: False

     

     


     

    返回某一行的内容

    linecache模块

    import linecache
    
    print    linecache.getline('3.txt',2)  # 返回文件的第二行的内容
    print    linecache.getlines('3.txt')   #返回文件的所有内容
    

     

    返回文件的所有内容

     

    1. 本节目标

    本节中,我们要保存知乎上“发现”页面的“热门话题”部分,将其问题和答案统一保存成文本形式。

    1. 本节目标

    本节中,我们要保存知乎上“发现”页面的“热门话题”部分,将其问题和答案统一保存成文本形式。

    >>> f = open('D:/test.txt','r') 
    

     

    2. 基本实例

    首先,可以用requests将网页源代码获取下来,然后使用pyquery解析库解析,接下来将提取的标题、回答者、回答保存到文本,代码如下:

    import requests
    from pyquery import PyQuery as pq
    
    url = 'https://www.zhihu.com/explore'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    }
    html = requests.get(url, headers=headers).text
    doc = pq(html)
    items = doc('.explore-tab .feed-item').items()
    for item in items:
        question = item.find('h2').text()
        author = item.find('.author-link-line').text()
        answer = pq(item.find('.content').html()).text()
        file = open('explore.txt', 'a', encoding='utf-8')
        file.write('n'.join([question, author, answer]))
        file.write('n'   '=' * 50   'n')
        file.close()
    

    这里主要是为了演示文件保存的方式,因此requests异常处理部分在此省去。首先,用requests提取知乎的“发现”页面,然后将热门话题的问题、回答者、答案全文提取出来,然后利用Python提供的open()方法打开一个文本文件,获取一个文件操作对象,这里赋值为file,接着利用file对象的write()方法将提取的内容写入文件,最后调用close()方法将其关闭,这样抓取的内容即可成功写入文本中了。

    运行程序,可以发现在本地生成了一个explore.txt文件,其内容如图所示。

     

    新葡亰496net 1

    这样热门问答的内容就被保存成文本形式了。

    这里open()方法的第一个参数即要保存的目标文件名称,第二个参数为a,代表以追加方式写入到文本。另外,我们还指定了文件的编码为utf-8。最后,写入完成后,还需要调用close()方法来关闭文件对象。

    2. 基本实例

    首先,可以用requests将网页源代码获取下来,然后使用pyquery解析库解析,接下来将提取的标题、回答者、回答保存到文本,代码如下:

    import requests
    from pyquery import PyQuery as pq
    
    url = 'https://www.zhihu.com/explore'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    }
    html = requests.get(url, headers=headers).text
    doc = pq(html)
    items = doc('.explore-tab .feed-item').items()
    for item in items:
        question = item.find('h2').text()
        author = item.find('.author-link-line').text()
        answer = pq(item.find('.content').html()).text()
        file = open('explore.txt', 'a', encoding='utf-8')
        file.write('n'.join([question, author, answer]))
        file.write('n'   '=' * 50   'n')
        file.close()
    

    这里主要是为了演示文件保存的方式,因此requests异常处理部分在此省去。首先,用requests提取知乎的“发现”页面,然后将热门话题的问题、回答者、答案全文提取出来,然后利用Python提供的open()方法打开一个文本文件,获取一个文件操作对象,这里赋值为file,接着利用file对象的write()方法将提取的内容写入文件,最后调用close()方法将其关闭,这样抓取的内容即可成功写入文本中了。

    运行程序,可以发现在本地生成了一个explore.txt文件,其内容如图所示。

     

    新葡亰496net 2

    这样热门问答的内容就被保存成文本形式了。

    这里open()方法的第一个参数即要保存的目标文件名称,第二个参数为a,代表以追加方式写入到文本。另外,我们还指定了文件的编码为utf-8。最后,写入完成后,还需要调用close()方法来关闭文件对象。

    注意了,对初学python的同学而言,open()函数着实存在一个不大不小的坑,而且十分不容易发现。

    二、常用函数

    序号

    方法及描述

    1

    file.close()

    关闭文件。关闭后文件不能再进行读写操作。

    2

    file.flush()

    刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。

    3

    file.fileno()

    返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。

    4

    file.isatty()

    如果文件连接到一个终端设备返回 True,否则返回 False。

    5

    file.next()

    返回文件下一行。

    6

    file.read([size])

    从文件读取指定的字节数,如果未给定或为负则读取所有。

    7

    file.readline([size])

    读取整行,包括 "n" 字符。

    8

    file.readlines([sizeint])

    读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。

    9

    file.seek(offset[, whence])

    设置文件当前位置

    10

    file.tell()

    返回文件当前位置。

    11

    file.truncate([size])

    从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后 V 后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。

    12

    file.write(str)

    将字符串写入文件,没有返回值。

    13

    file.writelines(sequence)

    向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行

     

    3. 打开方式

    在刚才的实例中,open()方法的第二个参数设置成了a,这样在每次写入文本时不会清空源文件,而是在文件末尾写入新的内容,这是一种文件打开方式。关于文件的打开方式,其实还有其他几种,这里简要介绍一下。

    • r:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
    • rb:以二进制只读方式打开一个文件。文件指针将会放在文件的开头。
    • r :以读写方式打开一个文件。文件指针将会放在文件的开头。
    • rb :以二进制读写方式打开一个文件。文件指针将会放在文件的开头。
    • w:以写入方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
    • wb:以二进制写入方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
    • w :以读写方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
    • wb :以二进制读写格式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
    • a:以追加方式打开一个文件。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新文件来写入。
    • ab:以二进制追加方式打开一个文件。如果该文件已存在,则文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新文件来写入。
    • a :以读写方式打开一个文件。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,则创建新文件来读写。
    • ab :以二进制追加方式打开一个文件。如果该文件已存在,则文件指针将会放在文件结尾。如果该文件不存在,则创建新文件用于读写。

    3. 打开方式

    在刚才的实例中,open()方法的第二个参数设置成了a,这样在每次写入文本时不会清空源文件,而是在文件末尾写入新的内容,这是一种文件打开方式。关于文件的打开方式,其实还有其他几种,这里简要介绍一下。

    • r:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
    • rb:以二进制只读方式打开一个文件。文件指针将会放在文件的开头。
    • r :以读写方式打开一个文件。文件指针将会放在文件的开头。
    • rb :以二进制读写方式打开一个文件。文件指针将会放在文件的开头。
    • w:以写入方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
    • wb:以二进制写入方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
    • w :以读写方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
    • wb :以二进制读写格式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
    • a:以追加方式打开一个文件。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新文件来写入。
    • ab:以二进制追加方式打开一个文件。如果该文件已存在,则文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新文件来写入。
    • a :以读写方式打开一个文件。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,则创建新文件来读写。
    • ab :以二进制追加方式打开一个文件。如果该文件已存在,则文件指针将会放在文件结尾。如果该文件不存在,则创建新文件用于读写。

    错误演示:

    三、常用的open模式

    r:读模式,文件不存在时不会创建新文件,文件的指针将会放在文件的开头。默认模式

    f = open('test.txt','r',encoding='UTF-8')       #encoding是转码的意思,告诉解释器以UTF-8的编码格式。不指定的话默认是以操作系统的编码为准的
    print(f.read())                                 #读所有,bytes--decode(utf-8)--str
    # print(f.read(5))                              #读取5个字符串(b模式下单位是字节)
    # print(f.readlines())                          #读所有,将结果放入列表中
    # print(f.readline())                           #一次读一行
    # print(f.readline(),end='')                    #一次读一行,并指定结束符,默认结束符为n
    f.close()                                       #关闭文件
    
    执行结果:
    第一行
    第二行
    第三行
    

    w:写模式,文件存在时则覆盖,文件不存在时创建新文件

    f = open('aa.txt','w',encoding='UTF-8')
    f.write('第一行 n')                           #换行需要添加换行符
    f.write('第二行n')
    # f.writelines('第三行n','第四行n')           #写入一个字符串列表,换行需要添加换行符
    
    #aa.txt中的内容:
    第一行
    第二行
    

    a:追加模式。如果该文件已存在,文件指针将会放在文件的结尾,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入

    f = open('aa.txt','a',encoding='UTF-8')
    f.write('追加的内容')
    # print(f.tell())                             #打印光标当前位置,单位是字节
    # f.flush()                                   #使内存的内容刷新至文件
    # f.seek(0)                                   #a模式光标会定位在文件尾部,这里重新定位一下光标位置
    # print(f.tell())                             #输出光标位置为0
    f.close()
    
    #aa.txt中的内容:
    第一行
    第二行
    追加的内容
    

    rb:二进制格式的读模式。文件指针将会放在文件的开头

    f = open('test.txt','rb')
    print(f.read())
    # print(f.read().decode('UTF-8'))       #可以decode,输出字符串
    f.close()
    
    #执行结果:
    b'xe7xacxacxe4xb8x80xe8xa1x8crnxe7xacxacxe4xbax8cxe8xa1x8crnxe7xacxacxe4xb8x89xe8xa1x8c'
    

    wb:二进制格式的写模式。文件存在时则覆盖,文件不存在时创建新文件

    f = open('a.txt','wb')
    f.write('你好'.encode('UTF-8'))         #字符串是Unicode编码,不能直接作为bytes类型写入,需要encode
    f.close()
    

    ab:二进制格式的追加模式。如果该文件已存在,文件指针将会放在文件的结尾,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入

    r :读写模式。文件指针将会放在文件的开头。

    w :读写模式。文件存在时则覆盖,文件不存在时创建新文件

    a :读写模式。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写

    rb :二进制格式的读写模式。文件指针将会放在文件的开头

    wb :二进制格式的读写模式。文件存在时则覆盖,文件不存在时创建新文件

    ab :二进制格式的追加模式。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写

     

    4. 简化写法

    另外,文件写入还有一种简写方法,那就是使用with as语法。在with控制块结束时,文件会自动关闭,所以就不需要再调用close()方法了。这种保存方式可以简写如下:

    with open('explore.txt', 'a', encoding='utf-8') as file:
        file.write('n'.join([question, author, answer]))
        file.write('n'   '=' * 50   'n')
    

    如果想保存时将原文清空,那么可以将第二个参数改写为w,代码如下:

    with open('explore.txt', 'w', encoding='utf-8') as file:
        file.write('n'.join([question, author, answer]))
        file.write('n'   '=' * 50   'n')
    

    上面便是利用Python将结果保存为TXT文件的方法,这种方法简单易用,操作高效,是一种最基本的保存数据的方法。

     

    4. 简化写法

    另外,文件写入还有一种简写方法,那就是使用with as语法。在with控制块结束时,文件会自动关闭,所以就不需要再调用close()方法了。这种保存方式可以简写如下:

    with open('explore.txt', 'a', encoding='utf-8') as file:
        file.write('n'.join([question, author, answer]))
        file.write('n'   '=' * 50   'n')
    

    如果想保存时将原文清空,那么可以将第二个参数改写为w,代码如下:

    with open('explore.txt', 'w', encoding='utf-8') as file:
        file.write('n'.join([question, author, answer]))
        file.write('n'   '=' * 50   'n')
    

    上面便是利用Python将结果保存为TXT文件的方法,这种方法简单易用,操作高效,是一种最基本的保存数据的方法。

     

    将数据保存到TXT文本的操作非常简单,而且TXT文本几乎兼容任何平台,但是这有个缺点,那就是不...

    >>> f = open('D:test.txt','r') 
    Traceback (most recent call last): 
    
     File"<ipython-input-56-6a0acaf613c9>", line 1, in <module> 
     f =open('D:test.txt','r') 
    
    OSError: [Errno 22] Invalid argument: 'D:test.txt' 
    

    四、 with open语句

    如果不用with语句,代码如下:

    f = open('test.txt','r',encoding='UTF-8')
    print(f.read())
    f.close()
    

    这里有两个问题:一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进行任何处理。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。

    with open('test.txt','r',encoding='UTF-8') as f:
        print(f.read())
    

     

    仿佛没有什么不对的地方,一模一样的嘛!再仔细看,斜杠的方向不一样,为什么会出现这样的情况呢,原因在于我们从系统中直接复制文件所在路径所致,Windows系统文件路径中的斜线符号为''。

    五、File(文件) 方法

     新葡亰496net 3

    1、file.read([size])

    从文件中读取指定的字节数,如果未给定或为负则读取所有。

    语法:

      fileObject.read();

    参数:

           size:从文件中读取的字节数

           (文件打开方式为文本模式时,代表读取n个字符;文件打开方式为b模式时,代表读取n个字节)

    返回值:

           返回从字符串中读取的字节

    实例:

    #test.txt的内容如下:
    第一行
    第二行
    第三行
    
    #读取文件内容:
    f = open('test.txt','r',encoding='UTF-8')
    #print(f.read())            #读取所有
    print(f.read(5))            #读取5个字符串
    
    #输出结果如下:
    第一行
    第
    

    这就引出了转义字符的概念,需要在字符中使用特殊字符时,python用反斜杠''转义字符,所以错误案例中的''被用作转义,导致解释器解释文件路径错误。

    2、file.seek(offset[, whence])

    seek() 方法用于移动文件读取指针到指定位置

    语法:

      fileObject.seek(offset[, whence])

    参数:

           offset -- 开始的偏移量,也就是代表需要移动偏移的字节数

           whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起

           (1和2必须在b模式下才能执行)

    实例1:

    f = open('test.txt','r',encoding='UTF-8')
    print(f.read())                     #读取完所有内容,此时光标在文件最后
    f.seek(3)                           #从文件开头位置往后偏移3个字节
    print(f.read())
    print(f.tell())                     #打印光标当前位置
    
    #返回的结果
    第一行
    第二行
    第三行
    一行
    第二行
    第三行
    31
    

    实例2:

    f = open('test.txt','rb')
    print(f.read(3).decode('UTF-8'))                    #读取三个字节,此时光标在第三个字节的位置
    print(f.tell())
    f.seek(3,1)                                         #从当前位置往后偏移3个字节
    print(f.read().decode('UTF-8'))
    
    #返回的结果
    第
    3
    行
    第二行
    第三行
    

    实例3:

    f = open('test.txt','rb')
    f.seek(0,2)                                         #从文件末尾位置偏移0个字节,就是文件最后
    print(f.tell())
    f.seek(-3,2)                                        #从文件末尾位置往前偏移3个字节
    print(f.tell())
    print(f.read().decode('UTF-8'))
    
    #返回的结果
    31
    28
    行
    

    改正的方法有两种:第一、将''的方向反向为'/',即文首正确的写法;第二、在含有转义符的字符串前加‘r'表示字符串内按原始含义解释,不做转义处理。(推荐!)

    3、file.truncate([size])

    truncate() 方法用于从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小

    语法:

      fileObject.truncate( [ size ])

    参数:

           size -- 可选,如果存在则文件截断为 size 字节

    实例:

    f = open('test.txt','r ',encoding='UTF-8')  #读写模式
    f.truncate(6)                               #截取6个字节
    print(f.read())
    
    #返回的结果
    第一
    

     

    >>> f = open(r'D:test.txt','r') 
    

    六、 小程序

    另附:

    1、文件拷贝

    with open('test.txt','r',encoding='UTF-8') as read_f,open('test2.txt','w',encoding='UTF-8') as write_f:
        for line in  read_f:                    #循环读取test.txt文件内容
            write_f.write(line)                 #写入到test2.txt
    

    转义字符表

    2、图片拷贝

    import sys
    
    source_file,target_fiel=sys.argv[1],sys.argv[2]                                     #传参赋值
    
    with open(source_file,'rb') as read_f,open(target_fiel,'wb') as write_f:            #二进制模式
        for line in  read_f:
            write_f.write(line)
    
    #用法:python copy.py source.jpg target.jpg
    #适用于任何类型文件的拷贝
    

    转义字符

    3、仿tail程序

    import sys
    import time
    
    file = sys.argv[2]
    
    with open(file,'rb') as f:                      #下面要用到seek()方法的whence,所以用b模式
        f.seek(0,2)
        while True:
            line = f.readline()
            if line:
                print(line.decode('UTF-8'))
            else:
                time.sleep(0.2)
    
    #用法:python tail.py -f xxx.log
    

    描述

    4、文件修改

    import os
    
    with open('test.txt','r',encoding='utf-8') as read_f,open('.test.txt.swap','w',encoding='utf-8') as write_f:
        for line in read_f:
            if line.startswith('第三行'):
                line='这是修改后的第三行'
            write_f.write(line)
    
    os.remove('test.txt')
    os.rename('.test.txt.swap','test.txt') 
    

    (在行尾时)

    续行符

    \

    反斜杠符号

    '

    单引号

    "

    双引号

    a

    响铃

    b

    退格(Backspace)

    e

    转义

    00

    n

    换行

    v

    纵向制表符

    t

    横向制表符

    r

    回车

    f

    换页

    oyy

    八进制数,yy代表的字符,例如:o12代表换行

    xyy

    十六进制数,yy代表的字符,例如:x0a代表换行

    other

    其它的字符以普通格式输出

    open()函数标识符表

    r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

    rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

    新葡亰496netTXT文本存款和储蓄,Python文件管理。r 打开一个文件用于读写。文件指针将会放在文件的开头。

    rb 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

    w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    w 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    wb 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

    ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

    a 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

    ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:

    • python urllib urlopen()对象方法/代理的补充说明
    • 详解Python中open()函数指定文件打开方式的用法
    • Python open()文件处理使用介绍
    • Python urlopen()函数 示例分享
    • Python urllib模块urlopen()与urlretrieve()详解

    本文由新葡亰496net发布于奥门新萄京娱乐场,转载请注明出处:新葡亰496netTXT文本存款和储蓄,Python文件管理

    关键词:

上一篇:新葡亰496net:文件操作,文件操作总结

下一篇:没有了