操作模式 具体含义
'r' 读取 (默认)
'w' 写入(会先截断之前的内容)
'x' 写入,如果文件已经存在会产生异常
'a' 追加,将内容写入到已有文件的末尾
'b' 二进制模式
't' 文本模式(默认)
'+' 更新(既可以读又可以写)

读写文本文件

新建文件 book.txt

所以我告诉你们,不要为生命忧虑吃什么,喝什么。为身体忧虑穿什么。生命不胜于饮食吗?身体不胜于衣裳吗?
你们看那天上的飞鸟,也不种,也不收,也不积蓄在仓里,你们的天父尚且养活它。你们不比飞鸟贵重得多吗?
你们哪一个能用思虑使寿数多加一刻呢?(或作使身量多加一肘呢)
何必为衣裳忧虑呢?你想野地里的百合花,怎么长起来,它也不劳苦,也不纺线。
然而我告诉你们,就是所罗门极荣华的时候,他所穿戴的,还不如这花一朵呢。
你们这小信的人哪,野地里的草今天还在,明天就丢在炉里,神还给它这样的妆饰,何况你们呢。
所以不要忧虑,说,吃什么?喝什么?穿什么?
这都是外邦人所求的。你们需用的这一切东西,你们的天父是知道的。
你们要先求他的国和他的义。这些东西都要加给你们了。
所以不要为明天忧虑。因为明天自有明天的忧虑。一天的难处一天当就够了。
def main():
    f = open('book.txt', 'r')
    print(f.read())
    f.close()


if __name__ == '__main__':
    main()

通过 for-in 循环逐行读取

使用 with 离开上下文环境时,会自动释放文件资源,不用写 f.close

def main():
    with open('book.txt', 'r') as f:
        for line in f:
            print(line)


if __name__ == '__main__':
    main()

通过 readlines 逐行读取

不写第二个参数,默认是 r, 只读

def main():
    with open('book.txt') as f:
        lines = f.readlines()
    print(lines)


if __name__ == '__main__':
    main()

写文件

使用 w 模式

def main():
    with open('hello.txt', 'w') as f:
        f.write('hello\n')
        f.write('world\n')


if __name__ == '__main__':
    main()

追加到文件

def main():
    with open('hello.txt', 'a') as f:
        f.write('Python')


if __name__ == '__main__':
    main()

读取二进制文件

下载图片到项目路径

wget https://images.itfun.tv/guide/image/7/eff346.jpg
def main():
    # 读取
    with open('eff346.jpg', 'rb') as f1:
        data = f1.read()

    # 写入另一个文件
    with open('python.jpg', 'wb') as f2:
        f2.write(data)


if __name__ == '__main__':
    main()

练习

  • 读取一个 Python 文件,显示除了注释以外的所有行