python_文件

1、文件的读写

打开文件的三步:打开 --> 操作 --> 关闭
权限:

  • r:(默认)

    • 只能读,不能写
    • 读取的文件不存在,会报错
  • r+:

    • 可以执行读写操作
    • 文件不存在,报错
    • 默认情况下,从文件指针所在位置开始写入
  • w:

    • 只有写权限
    • 文件存在时,会清空文件之前的内容
    • 文件不存在,不会报错,会创建新的文件并写入
  • w+:

    • 可读可写
    • 文件存在时,会清空文件内容
    • 文件不存在,不报错,会创建新的文件
  • a:

    • 只有写权限
    • 文件存在时,不会清空文件内容,会添加到文件的最后一行
    • 文件不存在时,会报错
  • a+:

    • 可读可写
    • 文件存在时,不清空文件内容,在末尾追加
    • 文件不存在,不报错,直接创建文件并写入
f = open('/tmp/passwd','w+')    ##打开文件
con = f.read()                 ##读操作
print(con)
print(f.writable())            ##查看写权限
print(f.readable())            ##查看读权限
print(f.tell())                #查看当前指针所在的位置
f.write('hello')               #写操作
print(f.tell())
f.close()                      #关闭
运行结果:
True
True
0
5

2、文件的读取操作

默认情况下读取文件的所有内容,小文件可以直接用read读取,如果
是大文件(文件大小>内存大小),不能通过read一次性读取所有内容。

  • read():读取所有
f = open('/tmp/passwd','r+') 
print(f.read())
运行结果:
hello
nihao
hello linux
  • readline():只读取一行,默认读取第一行
 f = open('/tmp/passwd','r+') 
 print(f.readline())
运行结果:
hello
  • readlines():读取文件内容,返回一个列表,列表的元素分别为文件
    行内容
f = open('/tmp/passwd','r+') 
print(f.readlines())
f.close()
运行结果:
['hello\n', 'nihao\n', 'hello linux\n']
f = open('/tmp/passwd','r+')
print(f.read(4))      #类似于head -c 4 /tmp/passwd
print(f.readline(),end='')  ##从当前指针继续读取
print(f.readlines(),end='')
f.close()
运行结果:
hell
o
['nihao\n', 'hello linux\n']
f = open('/tmp/passwd','r+')
print(f.read(4))
print([line.strip() for line in f.readlines()])# 将字符串遍历分开,另一种方法:print(list(map(lambda x:x.strip(),f.readlines())))
f.close()
运行结果:
hell
['o', 'nihao', 'hello linux']
  • write():文件的写操作
  • writelines([‘a’,‘b’]) :将列表里的每个元素写入文件

3、文件的指针seek

  • seek方法,移动指针
  • seek的第一个参数是偏移量:>0,表示向右移动,<0表示向左移动
  • seek的第二个参数是:
    0:移动指针到文件开头
    1:不移动指针
    2:移动指针到末尾
f = open('/tmp/passwd','rb+')  ##b代表二进制文件
print(f.tell())   ##显示当前指针所在位置
print(f.read(3))
print(f.tell())
f.seek(-1,2)   ##将文件指针向左移到末尾
print(f.read())
print(f.tell())
f.close()
运行结果:
0
b'roo'
3
b'\n'
2243

4、非纯文本文件的读取

  • 读取文本文件:r r+ w w+ a a+
  • 读取二进制文件:rb rb+ wb wb+ ab ab+
f1 = open('hello.png',mode='rb')
content = f1.read()
f1.close()

f2 = open('111.jpg',mode='wb')
f2.write(content)
f2.close()

5、上下文管理器

上下文管理器:打开文件,执行完with语句内容之后,自动关闭文件对象。

with open('/tmp/passwd') as f:
    print(f.read())
    
运行结果:(为/tmp/passwd的文件内容)
setroubleshoot:x:992:989::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
  • 同时打开两个文件:
with open('/tmp/passwd') as f1,open('/tmp/passwd1','w+') as f2:
    f2.write(f1.read())  ##将第一个文件的内容写入第二个文件中
    f2.seek(0)           ##移动指针到文件最开始
    print(f2.read())     ##读取第二个文件内容
    
运行结果:(为/tmp/passwd的文件内容)
setroubleshoot:x:992:989::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

6、文件的实例练习

"""
# _*_coding:utf-8 _*_
Name:文件_03.py
Date:4/9/19
Author:LiMin
Connect:314690259@qq.com
Desc:
"""
"""
创建文件data.txt,文件共100000行,每行存放一个1~100之间的整数,写完后读取文件内容
"""
import random
f = open('date.txt','w+')
for i in range(100000):
    f.write(str(random.randint(1,100)) + '\n')
f.seek(0)
print(f.read())
f.close()
运行结果:
...
25
3
53
37
43
26
...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值