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

    操作模式

               1。     r 只读模式

               2。    w 创建模式,若文件已存在,则覆盖旧文件

               3。    a追加模式,新数据会写到文件末尾

    创建文件

    f = open(file='D:/工作日常/staff.txt',mode='w')
    f.write("Alex  CEO  600
    ")
    f.write("黑姑娘  行政  5000
    ")
    f.close()

    只读模式

    f = open(file='兼职白领学生空姐模特护士联系方式.txt',mode='r')
    print(f.readline())  # 读一行
    print('------分隔符-------')
    data = f.read()  # 读所有,剩下的所有
    print(data)
    f.close()

    追加模式

    f = open(file='兼职白领学生空姐模特护士联系方式.txt',mode='a')
    f.write("黑姑娘 北京  168  48
    ")  # 会追加到文件尾部
    f.close()

    循环文件

    f = open(file='兼职白领学生空姐模特护士联系方式.txt',mode='r')
    for line in f:
        line = line.split()
        name,addr,height,weight,phone = line
        height = int(height)
        weight = int(weight)
        if height > 170 and weight <= 50:
            print(line)
    f.close()

    其他功能

        def mode(self) -> str:
            返回文件打开的模式
        def name(self) -> str:
            返回文件名
        def fileno(self, *args, **kwargs): # real signature unknown
            返回文件句柄在内核中的索引值,以后做IO多路复用时可以用到
        def flush(self, *args, **kwargs): # real signature unknown
            把文件从内存buffer里强制刷新到硬盘
        def readable(self, *args, **kwargs): # real signature unknown
            判断是否可读
        def readline(self, *args, **kwargs): # real signature unknown
            只读一行,遇到
     or 
    为止
        def seek(self, *args, **kwargs): # real signature unknown
            把操作文件的光标移到指定位置
            *注意seek的长度是按字节算的, 字符编码存每个字符所占的字节长度不一样。
            如“路飞学城” 用gbk存是2个字节一个字,用utf-8就是3个字节,因此以gbk打开时,seek(4) 就把光标切换到了“飞”和“学”两个字中间。
            但如果是utf8,seek(4)会导致,拿到了飞这个字的一部分字节,打印的话会报错,因为处理剩下的文本时发现用utf8处理不了了,因为编码对不上了。少了一个字节
        def seekable(self, *args, **kwargs): # real signature unknown
            判断文件是否可进行seek操作
        def tell(self, *args, **kwargs): # real signature unknown
            返回当前文件操作光标位置 
        def truncate(self, *args, **kwargs): # real signature unknown
            按指定长度截断文件
            *指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。
        def writable(self, *args, **kwargs): # real signature unknown
            判断文件是否可写

    不占硬盘方式的文件修改代码示例

    import os
    f_name = "兼职白领学生空姐模特护士联系方式.txt"
    f_new_name = "%s.new" % f_name
    old_str = "刘诺涵"
    new_str = "[黑姑娘]"
    f = open(f_name,'r')
    f_new = open(f_new_name,'w')
    for line in f:
        if old_str in line:
            new_line = line.replace(old_str,new_str)
        else:
            new_line = line
        f_new.write(new_line)
    f.close()
    f_new.close()
    os.rename(f_new_name,f_name) #把新文件名字改成原文件 的名字,就把之前的覆盖掉了,windows使用os.replace #
  • 相关阅读:
    【PA2014】【BZOJ3709】Bohater(贪心,排序)
    【POJ1328】Radar Installation(贪心,决策包容)
    【NOIP2002】【Luogu1032】字串变换
    【NOIP2010】【Luogu1199】三国游戏
    【NOIP2009】【Luogu1068】分数线划定
    【NOIP2002】【Luogu1036】选数
    【NOIP2004】【Luogu1085】不高兴的津津
    【NOIP2003】【luogu1042】乒乓球
    【NOIP2012】【Luogu1080】国王游戏(贪心,邻项交换)
    Jzoj4894 SJR的直线
  • 原文地址:https://www.cnblogs.com/jrb2018/p/11033017.html
Copyright © 2011-2022 走看看