• 文件处理


    打开文件

    f = open('somefile.txt')

    如果文件处于其他地方,可指定全名

    打开文件的模式:
    open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

    字符 | 含义

    'r' | 读取(默认值)
    'w' | 写入,并先截断文件(对文件从头开始写,已有的文件丢失)
    'x' | 排它性创建,如果文件已存在则失败,独占模式
    'a' | 写入,如果文件存在则在末尾追加
    'b' | 二进制模式(图片之类的)与其他模式结合
    't' | 文本模式(默认,与其他模式结合
    '+' | 更新磁盘文件(读取并写入),与其他模式结合

    默认的模式是 'r' (打开并读取文本,同 'rt' )。对于二进制写入, 'w+b' 模式打开并把文件截断成 0 字节; 'r+b' 则不会截断
    '+'可与其他任何模式结合起来使用,表示既可读取也可写入,要打开一个文本文件进行读写,可使用'r+' ,
    'r+'和'w+'之间有个重要差别:后者截断文件,而前者不会这样做。

    默认情况下,行以' '结尾,Python使用通用换行模式。
    能够识别所有合法的换行符(' '、' '和' ')。如果要使用这种模式,同时禁止自动转换,可将关键字参数newline设置为空字符串,如open(name, newline='')。如果要指定只将' '或' '视为合法的行尾字符,可将参数newline设置为相应的行尾字符。这样,读取时不会对行尾字符进行转换,但写入时将把' '替换为指定的行尾字符。

    如果文件包含非文本的二进制数据,只需使用二进制模式(如'rb')来禁用与文本相关的功能

    文件的基本方法

    1,读取和写入

    f = opne('sometext.txt','w')
    f.write('hello   ,')
    f.close()
    
    
    f = opne('sometext.txt','r')
    f.read(4)
    f.close()
    读取4个字符
    

    2,使用管道重定向
    cat somefile.txt | python somescript.py | sort

    # somescript.py 
    import sys 
    text = sys.stdin.read() 
    words = text.split() 
    wordcount = len(words) 
    print('Wordcount:', wordcount) 
    
    

    str.split(sep=None, maxsplit=-1)
    返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串
    str.split()
    如果给出了 sep,则连续的分隔符不会被组合在一起而是被视为分隔空字符串 (例如 '1,,2'.split(',') 将返回 ['1', '', '2'])。 sep 参数可能由多个字符组成 (例如 '1<>2<>3'.split('<>') 将返回 ['1', '2', '3'])。 使用指定的分隔符拆分空字符串将返回 ['']

    如果 sep 未指定或为 None,则会应用另一种拆分算法:连续的空格会被视为单个分隔符,其结果将不包含开头或末尾的空字符串,如果字符串包含前缀或后缀空格的话。 因此,使用 None 拆分空字符串或仅包含空格的字符串将返回 []

    随机存取

    文件对象的两个方法:seek 和 tell。

    方法 seek(offset[, whence])将当前位置(执行读取或写入的位置)移到 offset 和whence 指定的地方。参数 offset 指定了字节(字符)数,而参数 whence 默认为 io.SEEK_SET(0),这意味着偏移量是相对于文件开头的(偏移量不能为负数)。参数 whence 还可设置为 io.SEEK_CUR(1)或 io.SEEK_END(2),其中前者表示相对于当前位置进行移动(偏移量可以为负),而后者表示相对于文件末尾进行移动

    >>> f = open(r'C:	extsomefile.txt', 'w') 
    >>> f.write('01234567890123456789') 
    20 
    >>> f.seek(5) 
    5 
    >>> f.write('Hello, World!') 
    13 
    >>> f.close() 
    >>> f = open(r'C:	extsomefile.txt') 
    >>> f.read() 
    '01234Hello, World!89‘
    

    方法 tell()返回当前位于文件的什么位置

    >>> f = open(r'C:	extsomefile.txt') 
    >>> f.read(3) 
    '012' 
    >>> f.read(2) 
    '34' 
    >>> f.tell() 
    5 
    

    读取后只能往后步进,无法再重新读取已经访问过的位置。

    读取和写入行

    要读取一行(从当前位置到下一个分行符的文本),可使用方法readline。调用这个方法时,可不提供任何参数(在这种情况下,将读取一行并返回它);也可提供一个非负整数,指定readline最多可读取多少个字符。因此,如果some_file. readline()返回的是'Hello, World! ',那么some_file.readline(5)返回的将是'Hello'。要读取文件中的所有行,并以列表的方式返回它们,可使用方法readlines。

    方法writelines与readlines相反:接受一个字符串列表(实际上,可以是任何序列或可迭代对象),并将这些字符串都写入到文件(或流)中。请注意,写入时不会添加换行符,因此你必须自行添加.

    >>> f = open(r'C:	extsomefile.txt') 
    >>> lines = f.readlines() 
    >>> f.close() 
    >>> lines[1] = "isn't a
    " 
    >>> f = open(r'C:	extsomefile.txt', 'w') 
    >>> f.writelines(lines) 
    >>> f.close() 
    

    迭代文件内容

    每次一行

    with open(filename) as f: 
     while True: 
     line = f.readline() 
     if not line: break 
     process(line)
    

    另外一种方法

    with open('area.ini', 'r')  as f : 
        for  line in f.readlines(): print(line) 
    

    fileinput 实现延迟行迭代

    减少内存占用

    import fileinput 
    for line in fileinput.input(filename): 
     process(line)
    

    文件迭代件

    with open('area.ini', 'r')  as f : 
        for  line in f : print(line)
    
    或:
    for line in  open('area.ini', 'r') : print(line)
    
    

    文件读写

    I/O
    打开文件:
    open(name[.mode[.buffering]])

    文件不存在则报错.

    文件模式:

    b参数处理二进制文件音乐文件或图像

    文件缓冲区:

    文件读取:
    分为按字节和行读取, 方法有 read() readlines() close()

    read() 一次性读取到内存
    cloase() 必须关闭文件

    文件写入

  • 相关阅读:
    第一周JAVA基本概念
    Visual Studio 2008 附加进程调试
    .NET错误提示之:ConnectionString尚未初始化
    .NET知识点总结
    JS脚本的基础应用
    错误提示之:无法分析从服务器收到的消息。
    客户端和服务端之间的通信(TCP)
    错误提示之:sqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间
    错误提示之:DataTable已属于另一个DataSet。
    错误提示之:INSERT 语句与 COLUMN FOREIGN KEY 约束 'FK_CCRM_Service_CCRM_Userlist' 冲突。
  • 原文地址:https://www.cnblogs.com/g2thend/p/11819481.html
Copyright © 2020-2023  润新知