文件操作

文件操作

文件打开的两种方式

文件句柄 = open(‘文件路径’, ‘模式’)

python中打开文件有两种方式,即:open(…) 和 file(…),本质上前者在内部会调用后者来进行文件操作,在这里我们推荐使用open

一、open

f = open('文件路径', mode='r', encoding='utf-8')
f.read()
f.close()

该方法每次都要执行f.close()方法,否则该文件将一直无法释放内存空间

二、with

with open('文件路径', mode='r', encoding='utf-8') as f:
    f.read()

和方法一的优点就是不需要写f.close(),并且可以多个文件同时打开,例如:

with open('文件1路径', mode='r' encoding='utf-8') as f, with open('文件路径2', mode='r' encoding='utf-8') as f2:
    f.read()
    f2.read()

文件操作

打开文件的模式

  • r, 只读模式(默认)
  • w, 只写模式 [不可读; 不存在则创建; 存在则删除内容]
  • a, 追加模式 [可读; 不存在则创建; 存在则只追加内容]

‘+’表示可以同时读写某个文件

  • r+ ,可读写文件 【可读;可写;可追加】
  • w+ ,先写再读 【这个方法打开文件会清空原本文件中的所有内容,将新的内容写进去,之后也可读取已经写入的内容】
  • a+ , 同a

“U”表示在读取时,可以将 \r \n \r\n自动转换成 \n (注意:只能与 r 或 r+ 模式同使用)

  • rU
  • r+U
  • rbU
  • rb+U

读取 r

读取文字
f = open('demo',mode='r',encoding='utf-8')
content = f.read()
print(content)
f.close()
读取bytes类型
f = open('demo', mode='rb')
content = f.read()
print(content)
f.close()
读写模式
f = open('demo), mode='r+', encoding='utf-8')
print(f.read())
f.write('asd')
f.close()

可以先读后写,内容追加到文件后面。

如果先写后读,内容会从头开始覆盖,如果内容超过远文件的长度,则没有读取的内容,否则读取当前光标位置到结束的内容

读写bytes类型
f = open('demo', mode='rb+')
content = f.read()
print(content)
f.close()

写入w

w模式会将之前的文件删除,是指文件open的时候会将之前的文件删除,如果一次open打开 之后 写入并不会删除上一次的内容

写入文本(如果没有文件会重新创建,否则会清空内容)
f = open('demo', mode='w',encoding='utf-8')
f.write('你好')
f.close()
写入bytes类型
f = open('demo', mode='wb')
f.write('你好'.encode('utf-8'))
f.close()
写读模式
f = open('log',mode='w+',encoding='utf-8')
f.write('aaa')
f.seek(0)
print(f.read())
f.close()
写读bytes类型
f = open('log',mode='wb+')
f.write('aaa')
f.seek(0)
print(f.read())
f.close()

追加 a

追加
f = open('log',mode='a',encoding='utf-8')
f.write('佳琪')
f.close()
读写追加
f = open('log',mode='a+',encoding='utf-8')
f.write('佳琪')
f.seek(0)
print(f.read())
f.close()
bytes类型追加
f = open('log',mode='ab')
f.write('佳琪'.encode('utf-8'))
f.close()

一些方法

readlines

读取所有文件并根据换行保存,返回一个列表

如果没有参数则每一行为一个元素
如果有参数如果一行的字符数 大于 hint 则 list中只包含一行的数据 ,否则 包含 if 1+next > hint 行数据

readline

仅读取一行数据

    with open('user', mode='rb+') as f:
        print(f.readline(20))
如果有加参数则读取一行,在windos上以\r\n为结尾
如果加上参数则表示 读取N个字节

seek

正读 所有偏移量从最开始0开始算
相对 所有偏移量从读到的当前位置开始算
倒读 偏移量从文本最后开始算起 某些含有换行的 也会占2个字符\r\n 
除了 默认的0 其他两个必须在bytes类型下才可以使用


seek()方法没有返回值。 请注意,如果文件使用“a”或“a+”模式打开进行附加,则在下一次写入时,任何seek()操作都将被撤销。

如果仅使用’a‘在附加模式下打开该文件,该方法基本上是无操作的,但是对于在启用读取(模式’a+‘)的附加模式下打开的文件,该方法仍然有用。

如果使用’t‘以文本模式打开文件,则只有由tell()返回的偏移是合法的。使用其他偏移会导致未定义的行为。

tell

打印出当前光标所在位置

filleno

文件描述符

flush

刷新文件内部缓冲区

isatty

判断文件是否是同意tty设备

truncate

用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则从当前位置起截断;截断之后 size 后面的所有字符被删除。

循环读取文件

 打开文件
fo = open("runoob.txt", "r+")
print "文件名为: ", fo.name

line = fo.readline()
print "读取第一行: %s" % (line)

# 截断剩下的字符串
fo.truncate()

# 尝试再次读取数据
line = fo.readline()
print "读取数据: %s" % (line)

# 关闭文件
fo.close()

一行行循环读取文件

    with open('user', mode='rb+') as f:
        while 1:
            line = (f.readline())
            if line:
                print(line)
            else:
                break
    with open('user', mode='rb+') as f:
        line = f.readline()
        while line:
            print(line)
            line = f.readline()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值