zoukankan      html  css  js  c++  java
  • Python基础之 一 文件操作

    文件操作

    流程:
    1:打开文件,得到文件句柄并赋值给一个变量
    2:通过句柄对文件进行操作
    3:关闭文件

    模式解释
    r(读) , w(写) ,a(附加)r+(读写的读), w+(读写的写),a+(读附加的附加)

    b表示以二进制模式打开文件(3.0里网络传输只能用此模式,或者视频音频等)
    以上模式以二进制模式表示为:rb,wb,ab,rb+,wb+,ab+
    如何将文本以二进制写入文件
    f = open('file','wb')
    f.write('hello world',encode()) 这里转换为二进制格式写入文件即可

    U表示在读取时,可以将 自动转换为
    写法:rU 或者 r+U

    缓冲:
    0:禁用缓冲
    负数:使用系统默认缓冲
    1:只缓冲1行数据
    2+:指定缓冲空间大小

    打开文件举例: f1=open('/tmp/passwd','r')

    方法:
    read(): 将文件内容以字符串形式全部读取。
    readable():判断文件是否可读。
    write():写文件
    writeable():判断文件是否可写
    flush():刷新手工将内存中的文件内容写到硬盘上

    readline()用法:读取一行。
    举例读取前5行:
    for i in range(5):
    file.readline()

    readlines():将文件内容以列表形式打印(这个方法效率低对大文件)
    举例打印文件前10行:
    for index,line in enumerate(f.readlines()):
        if index == 9:
            break
        print(line.strip())
    这种方法性能不好,不要用在大文件处理,因为会一次性读取所有文件内容。

    tell(): 显示当前指针在文件中位置(字节显示)
    seek(offset[whence]) 指针偏移
    whence:偏移量起点
    0:从文件头 (默认位置)
    1:从当前位置
    2:从文件尾部 例如:f1.seek(0,2)
    offset:偏移数量
    seekable():判断文件中的光标是否可以移动,可以返回True,否则返回False.(linux中一切皆文件,终端设备在系统里也是文件,但是光标是不可以移动的。)
    encoding:打印文件的编码
    errors:异常处理
    fileno():返回文件句柄在内存中的编号(这个编号属于操作系统内部IO),一般不使用这个方法(忘掉它吧)。
    name:调用当前文件名称
    isatty():看终端设备(打印机,屏幕等终端),用于底层交互。
    close(): 关闭文件
    closed:判断文件是否关闭,返回(True/False)
    truncate():截断,如果不带参数会清空文件。带参数如:truncate(20):表示从文件开头往后截取20个字符。需要以a模式打开文件。

    注意:文件以r+模式打开文件,读取文件是按照正常方式从头开始读取,但中途写入还是会直接写到文件末尾。

    打开读取文件效率最高的写法:
    count = 0
    for line in f:
        if count == 9:
            print('----分隔符-----')

            print(line.strip())
            continue
        print(line.strip())
        count += 1
    这种方法是内存只保存一行,读取的一行覆盖上一行原理。

    文件修改方法:
    只有同时打开2个文件,第一个是需要读取的源文件,第二个是写入内容的新文件,过程是读取源文件每行数据,如果符合修改需求,则修改,然后将每行数据写入新文件中。

     1 src_file = open('源文件名',encoding='utf-8')
     2 dst_file = open('文件名.bak','w',encoding='utf-8')
     3 
     4 for line in src_file:
     5     if '准备修改的字符串' in line.strip():
     6         #注意:这里修改一行后一定要重新指定到一个变量
     7         line = line.replace(准备修改的字符串,替换的字符串) 
     8         print(line.strip())
     9     dst_file.write(line)
    10 src_file.close()
    11 dst_file.close()
    View Code

    with : 可以自动在with执行完后自动关闭打开的文件

    with open('file1','r',encoding='utf-8') as f1 ,

           open('file2','r',encoding='utf-8') as f2:    #使用with可以同时打开多个文件功能,写法建议参考这里。

        ....

    小技巧动态输出显示进度条
    import sys,time
    for i in range(10):
        sys.stdout.write('#') 动态输出到屏幕,不会换行
        sys.stdout.flush() 刷新屏幕,显示动态输出
        time(0.1) 为查看方便

  • 相关阅读:
    HDU 1950 Bridging signals
    HDU 1025 (LIS+二分) Constructing Roads In JGShining's Kingdom
    HDU 1160 FatMouse's Speed
    HDU 1257 最少拦截系统
    HDU 1574 RP问题
    解同余式ax ≡ c(mod m)
    拓展欧几里得算法及代码实现
    百练 1088 滑雪
    [再做01背包] POJ 3624 Charm Bracelet
    百练 2755 神奇的口袋
  • 原文地址:https://www.cnblogs.com/zy6103/p/6769752.html
Copyright © 2011-2022 走看看