python中文件的相关操作

偶尔善良 提交于 2020-02-01 04:36:31

1. 对文件的常用操作

文件的基本操作有三步:打开文件 —>操作文件 —>关闭文件

1.1 r(readonly)默认参数

    -只能读,不能写
    -读取文件不存在会报错

1.2 w

	-写文件(write only)
    -文件存在时,会清空文件的内容并写入新的文件内容
    -文件不存在时,会创建的新的文件并写入内容

1.3 a(append)

	-写文件(write only)
    -写:不会清空文件内容 会在文件末尾追加
    -写:文件不存在的时候 不会报错 会创建新的文件并写入内容

1.4 r+

    -可读也可写
    -文件不存在时读写都会报错
    -:指针在首位,不能追加文件内容,只能覆盖,但是可以移动指针来完成追加

1.5 w+

    -可读也可写
    -文件存在时,会清空文件的内容并写入新的文件内容
    -文件不存在时,会创建的新的文件并写入内容

1.6 a+

    -可读也可写
    -写:不会清空文件内容 会在文件末尾追加
    -写:文件不存在的时候 会创建新的文件并写入内容
    -读文件的时候 一定要移动文件指针(a/a+ 在文件对象创建的时候 
     指针默认就在文件末尾)

1.7 示例

首先将/etc/passwd移动到/tmp/下

cp /etc/passwd /tmp
cd /tmp
chmod 777 passwd
# 1.打开文件
f = open('/tmp/passwd','r+')

# 2.操作
print(f)
content = f.read()
print(content)
# 告诉当前文件指针的位置
# 判断文件对象拥有的权限
print(f.readable())
print(f.writable())
print(f.tell())
# 移动文件指针
f.seek(0,0)
print(f.read())
print(f.tell())
print('~~~~~~')
print(f.read())
f.write('python')
# 3.关闭
f.close()

2. 文件的读取

默认情况下 读取文件的内容 小的文件:直接read读取即可
如果是一个大文件(file size >=mem) readline()

2.1 f.read()

读取文件内容,返回文件所有内容

f = open('/tmp/passwd','r+')
print(f.read())
f.close()

输出结果:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
unbound:x:997:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
libstoragemgmt:x:996:993:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:995:992:User for colord:/var/lib/colord:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin
geoclue:x:993:991:User for geoclue:/var/lib/geoclue:/sbin/nologin
setroubleshoot:x:992:989::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
chrony:x:991:988::/var/lib/chrony:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:990:985::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
kiosk:x:1000:1000:kiosk:/home/kiosk:/bin/bash
python

2.2 f.read(num)

指定读取文件的字符数

f = open('/tmp/passwd','r+')
print(f.read(4))
f.close()

输出结果:

root

2.3 f.readline()

一行一行的读取文件内容

f = open('/tmp/passwd','r+')
print(f.readline())
f.close()

输出结果:

root:x:0:0:root:/root:/bin/bash

2.4 f.readlines()

读取文件内容并返回一个列表,列表里的元素分别为文件每行的内容,并且都有换行符’\n’

f = open('/tmp/passwd','r')
print(f.readlines())
f.close()

输出结果:

['root:x:0:0:root:/root:/bin/bash\n', 'bin:x:1:1:bin:/bin:/sbin/nologin\n', 'daemon:x:2:2:daemon:/sbin:/sbin/nologin\n', 'adm:x:3:4:adm:/var/adm:/sbin/nologin\n', 'lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\n', 'sync:x:5:0:sync:/sbin:/bin/sync\n', 'shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\n', 'halt:x:7:0:halt:/sbin:/sbin/halt\n', 'mail:x:8:12:mail:/var/spool/mail:/sbin/nologin\n', 'operator:x:11:0:operator:/root:/sbin/nologin\n', 'games:x:12:100:games:/usr/games:/sbin/nologin\n', 'ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin\n', 'nobody:x:99:99:Nobody:/:/sbin/nologin\n', 'systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin\n', 'systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin\n', 'dbus:x:81:81:System message bus:/:/sbin/nologin\n', 'polkitd:x:998:996:User for polkitd:/:/sbin/nologin\n', 'unbound:x:997:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin\n', 'tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin\n', 'libstoragemgmt:x:996:993:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin\n', 'rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin\n', 'colord:x:995:992:User for colord:/var/lib/colord:/sbin/nologin\n', 'usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin\n', 'abrt:x:173:173::/etc/abrt:/sbin/nologin\n', 'saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin\n', 'geoclue:x:993:991:User for geoclue:/var/lib/geoclue:/sbin/nologin\n', 'setroubleshoot:x:992:989::/var/lib/setroubleshoot:/sbin/nologin\n', 'rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin\n', 'rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin\n', 'nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin\n', 'radvd:x:75:75:radvd user:/:/sbin/nologin\n', 'qemu:x:107:107:qemu user:/:/sbin/nologin\n', 'chrony:x:991:988::/var/lib/chrony:/sbin/nologin\n', 'pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin\n', 'gdm:x:42:42::/var/lib/gdm:/sbin/nologin\n', 'gnome-initial-setup:x:990:985::/run/gnome-initial-setup/:/sbin/nologin\n', 'avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin\n', 'postfix:x:89:89::/var/spool/postfix:/sbin/nologin\n', 'ntp:x:38:38::/etc/ntp:/sbin/nologin\n', 'sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin\n', 'tcpdump:x:72:72::/:/sbin/nologin\n', 'kiosk:x:1000:1000:kiosk:/home/kiosk:/bin/bash\n', 'python']

2.5 f.readlines()

读取文件内容并返回一个列表,列表里的元素分别为文件每行的内容,没有换行符’\n’

f = open('/tmp/passwd','r+')
print([line.strip() for line in f.readlines()])
f.close()

输出结果:

['root:x:0:0:root:/root:/bin/bash', 'bin:x:1:1:bin:/bin:/sbin/nologin', 'daemon:x:2:2:daemon:/sbin:/sbin/nologin', 'adm:x:3:4:adm:/var/adm:/sbin/nologin', 'lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin', 'sync:x:5:0:sync:/sbin:/bin/sync', 'shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown', 'halt:x:7:0:halt:/sbin:/sbin/halt', 'mail:x:8:12:mail:/var/spool/mail:/sbin/nologin', 'operator:x:11:0:operator:/root:/sbin/nologin', 'games:x:12:100:games:/usr/games:/sbin/nologin', 'ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin', 'nobody:x:99:99:Nobody:/:/sbin/nologin', 'systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin', 'systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin', 'dbus:x:81:81:System message bus:/:/sbin/nologin', 'polkitd:x:998:996:User for polkitd:/:/sbin/nologin', 'unbound:x:997:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin', 'tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin', 'libstoragemgmt:x:996:993:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin', 'rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin', 'colord:x:995:992:User for colord:/var/lib/colord:/sbin/nologin', 'usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin', 'abrt:x:173:173::/etc/abrt:/sbin/nologin', 'saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin', 'geoclue:x:993:991:User for geoclue:/var/lib/geoclue:/sbin/nologin', 'setroubleshoot:x:992:989::/var/lib/setroubleshoot:/sbin/nologin', 'rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin', 'rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin', 'nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin', 'radvd:x:75:75:radvd user:/:/sbin/nologin', 'qemu:x:107:107:qemu user:/:/sbin/nologin', 'chrony:x:991:988::/var/lib/chrony:/sbin/nologin', 'pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin', 'gdm:x:42:42::/var/lib/gdm:/sbin/nologin', 'gnome-initial-setup:x:990:985::/run/gnome-initial-setup/:/sbin/nologin', 'avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin', 'postfix:x:89:89::/var/spool/postfix:/sbin/nologin', 'ntp:x:38:38::/etc/ntp:/sbin/nologin', 'sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin', 'tcpdump:x:72:72::/:/sbin/nologin', 'kiosk:x:1000:1000:kiosk:/home/kiosk:/bin/bash', 'python']

3. 使用seek方法来移动指针

3.1 文件指针

使用文件指针来指定文件当前的位置
Python中可以使用seek()移动文件指针到指定位置,然后进行读/写
通常配合r+,w+,a+模式

3.2 f.seek()移动指针

f.seek()第一个参数是偏移量:

>0:代表向右移动
<0:代表向左移动

f.seek()第二个参数是:

0:移动指针到文件开头
1:不移动指针
2:移动指针到末尾

注意:移动的时候有些地方会有报错,使用二进制的方式打开即可(‘rb’)

示例:
在写入前后分别打印指针位置

f = open('/tmp/passwd','r+')
print(f.tell())	#0
f.write('hihihi')
print(f.tell())	#6
f.close()

输出结果:

0
6

指针移动到开头

f = open('/tmp/passwd','r+')
print(f.tell())
f.seek(0,0) #移动指针到开头
print(f.tell())
f.close()

输出结果:

0
0

指针移动到最后位置

f = open('/tmp/passwd','r+')
print(f.tell())
f.seek(0,2) #移动指针到末尾
print(f.tell())
f.close()

输出结果:

0
2196

4. 上下文管理器

之前我们使用 f = open(): 打开文件,都需要在程序末尾使用f.close()关闭文件
使用上述的方法不方便,如果忘记关闭文件执行程序的时候就会报错
现在使用 with open() as f: 打开文件,执行操作以后会自动关闭文件

上下文管理器 打开文件 执行完with语句后 自动关闭该文件

# f = open('/tmp/passwd')
with open('/tmp/passwd') as f:
    print(f.read())
print(f.closed)

输出结果:

hihihi:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
unbound:x:997:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
libstoragemgmt:x:996:993:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:995:992:User for colord:/var/lib/colord:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin
geoclue:x:993:991:User for geoclue:/var/lib/geoclue:/sbin/nologin
setroubleshoot:x:992:989::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
chrony:x:991:988::/var/lib/chrony:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:990:985::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
kiosk:x:1000:1000:kiosk:/home/kiosk:/bin/bash
python
True
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!