zoukankan      html  css  js  c++  java
  • Python文件方法

    打开文件

      使用open函数,语法格式为:open( name[, mode[, buffering]]),name为打开文件名,mode为打开文件方式,buffering控制文件的缓冲。

      mode可选,默认为只读模式,即r, 其中使用的参数有

    open函数中mode参数的值
    描述
    r
    w
    a 文件末尾追加
    b 二进制模式,可添加到其他模式中
    + 读/写模式,可以添加到其他模式中

      buffering可选,0表示输入输出无缓冲; 1表示有缓冲, 使用内存来代替硬盘,只有使用flush或者close时才会更新硬盘数据;大于1表示指定缓冲区大小;小于0表示使用默认的缓冲区大小。

    类文件对象中包含一些读方法和写方法以及定位光标,关闭类文件对象等方法。

    类文件对象方法
    read 读取字符
    readline 读取一行
    readlines 读取整个文件的所有行并将其作为列表返回
    write 写入字符
    writelines 将字符串列表写入文件,不过程序不会增加新行,需要自己添加
    seek 定位光标位置,
    close 关闭文件对象

    注意,写文件没有writeline方法,因为可以用write方法。

     

    关闭文件

      写过的文件总是应该关闭,是因为python可能会缓存写入的数据,如果程序因为某些原因崩溃了,那么数据根本就不会写入文件。要确保文件被关闭,应该使用try/finally语句,并且在finally子句中调用close方法。

    f = open('c:file.txt')
    try:
        f.write('close the file')
    finally:
        f.close()

    此外,还可以使用with语句,可以打开文件并将其赋值到变量上。之后就可以将数据写入文件。文件在语句结束后会自动关闭,即使是由于异常引起的结束也是如此。

    with open('c:file.txt') as f:
        f.write('close the file') 

      

      

    操作文件

    打开文件得打类文件对象以后就可以使用类文件对象方法进行读写操作了。

    例如,f = open('file.xt', 'r') 以只读方式打开文件,然后可以str = f.read(n)表示从打开的文件中读取n个字符

    循环处理文件每个字符

    f = open(filename)
    while True:
        char = f.read(1)
        if not char: break
        print(char)
    f.close()

    循环处理文件每行

    f = open(filename)
    while True:
        line = f.readline()
        if not line:
            break
        print(line)
    f.close()

    如果文件不是很大,可以将直接读取整个文件,然后进行处理

    f = open(filename)
    for char in f.read():
        print(char)
    f.close()
    f = open(filename)
    for line in f.readline():
        print(line)
    f.close()

     

    文件迭代器操作文件

    在python中,文件对象是可以迭代的,这意味着可以直接在for循环中使用它们,从而对它们进行迭代。

    f = open(filename)
    for line in f:
        print(line)
    f.close()

    sys.stdin也是可以迭代的,就像其他的文件对象一样。如果想要迭代标准输入中的所有行,可以按如下形式使用

    import sys
    for line in sys.stdin:
        print(line)

     

  • 相关阅读:
    欧拉函数 || [SDOI2008]仪仗队 || BZOJ 2190 || Luogu P2158
    欧拉函数 || Calculation 2 || HDU 3501
    并查集+时光倒流 || [JSOI2008]星球大战starwar || BZOJ 1015 || Luogu P1197
    并查集+启发式合并+LCA思想 || 冷战 || BZOJ 4668
    并查集+优先队列+启发式合并 || 罗马游戏 || BZOJ 1455 || Luogu p2713
    BZOJ-USACO被虐记
    #1
    BZOJ2441: [中山市选2011]小W的问题
    BZOJ2726: [SDOI2012]任务安排
    BZOJ1492: [NOI2007]货币兑换Cash
  • 原文地址:https://www.cnblogs.com/aituming/p/4709435.html
Copyright © 2011-2022 走看看