【Python中的】关于文件的相关操作

前言:

         在Python 中,我们有时需要对特定的文件进行打开,读取,改变,以及添加,

这就需要我们通过一定的代码进行实现,本篇博客将详细讲解在Python中如何对文

件进行管理,     

正文:

一、文件的打开关闭和相关的操作

1、进行文件的打开

示例:

f = open('/tmp/passwd','w')

2、进行文件的读取

content = f.read()      ###进行文件的读取
print(content)          ###查看文件的内容
print(f.writable())     ###查看文件是否可写
print(f.readable())     ###查看文件是否可读

3、进行文件写的操作

f,write('hello')     ###对文件进行写的操作

4、进行文件的关闭

f.close()          ###进行文件的关闭

二、对文件进行操作的相关参数

               参数 是否进行读写操作  文件不寻在是进行的操作
               r     只读不写 文件不存在,会进行报错
              r+  可以进行读写操作 文件不存在会进行报错,默认情况下,从文件指针所在的位置开始写入
              w   只能进行写的操作 会清空文件之前的内容,文件不存在,不会报错,会创建新的文件
             w+  可以进行读写操作 会清空文件的内容,文件不存在,不会进行报错,会创建新的文件
             a 只能进行只写操作 不会清空文件内容,文件不存在,会进行报错
            a+   可以进行文件的速写操作 不清空文件的内容,在末尾进行追加,不进行报错

1、r(默认)

只能读、不能写。

读取的文件不存在,会报错

f = open('/test1/passwd','r')
print(f.writable())
print(f.readable())
f.close()

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/文件的读操作.py
False
True

Process finished with exit code 0

2、r+

可以执行读写操作

文件不存在,会进行报错

默认情况下,文件从指针所在位置开始写入

f = open('/test1/passwd','r+')
print(f.writable())
print(f.readable())
f.write('hello')
f.seek(0)
print(f.read())
f.close()

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/文件的读操作.py
True
True
hellox: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
radvd:x:75:75:radvd user:/:/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
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
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
westos:x:1001:1001::/home/westos:/bin/bash


Process finished with exit code 0

3、w

只能进行写的操作

会清空文件之前的内容

文件不存在,不会进行报错,会创建新的文件,并进行写入操作

f = open('/test1/passwd','w+')
print(f.writable())
print(f.readable())
f.write('hello')
f.seek(0)
print(f.read())
f.close()

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/文件的读操作.py
True
True
hello

Process finished with exit code 0

4、w+

文件可读可写

会清空文件的内容

文件不存在,不会报错,会创建新的文件

f = open('/test1/passwd','w+')
print(f.writable())
print(f.readable())
f.write('hello')
f.seek(0)
print(f.read())
f.close()

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/文件的读操作.py
True
True
hello

Process finished with exit code 0

5、a

文件只能写入

不会清空文件内容

文件不存在,会进行报错

f = open('/test1/passwd','a')
print(f.writable())
print(f.readable())
f.write('Python')
f.close()

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/文件的读操作.py
True
False

Process finished with exit code 0

6、a+

文件可读可写

不清空文件的内容,在末尾追加

文件不存在。不进行报错

f = open('/test1/passwd','a+')
print(f.writable())
print(f.readable())
f.write('Java')
f.seek(0)
print(f.read())
f.close()

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/文件的读操作.py
True
True
helloPythonPythonJava

Process finished with exit code 0

7、进行当前指针位置的查看

f = open('/test1/passwd','r+')
print(f.writable())
print(f.readable())
print(f.tell())
f.write('Java')
print(f.tell())
f.seek(0)
print(f.tell())
print(f.read())
f.close()

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/文件的读操作.py
True
True
0
4
0
JavaoPythonPythonJava

Process finished with exit code 0

三、进行文件的读取

1、readlines():读取文件的内容,返回一个列表,列表中的元素分别为

文件的内容

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

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/文件的读操作.py
['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', 'radvd:x:75:75:radvd user:/:/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', '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', 'apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin\n', 'westos:x:1001:1001::/home/westos:/bin/bash\n']

Process finished with exit code 0

2、文件内容的逐行读取,默认情况下读取文件的所有内容,小文件直接

可以使用read读取,如果是大文件(文件大小 > 内存大小),不能通过

read一次性读取所有的内容,需要通过readline对文件的内容逐行进行读取

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


执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/文件的读操作.py
root:x:0:0:root:/root:/bin/bash


Process finished with exit code 0

3、移动文件的指针

seek 的第一个参数是偏移量:>0,表示向右移动,<0表示向左移动,

seek的第二个参数是:

   0 :移动指针到文件的开头

   1:表示不移动指针

   2:移动指针到末尾

f = open('/test1/passwd','r+')
print(f.tell())
f.write('hello')
f.seek(2)
print(f.tell())
f.close()


执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/文件的读操作.py
0
2

Process finished with exit code 0

4、文件的写入

f.write('hello')    ###默认写入文件内容在文件内容的开头

f = open('/test1/passwd','r+')
print(f.tell())
f.write('hello')
f.seek(0)
print(f.readline())
f.close()

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/文件的读操作.py
0
hello,m0:0:root:/root:/bin/bash


Process finished with exit code 0

f.writelines['a,b']    ###将列表中的内容写入文件第一个元素的开头

f = open('/test1/passwd','r+')
print(f.tell())
f.writelines('a,b')
print(f.read(3))
f.close()

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/文件的读操作.py
0
a,b

Process finished with exit code 0

f.read(3)           ###读取文件的以指针开始往后的三个字符,

f = open('/test1/passwd','r+')
print(f.tell())
f.write('hello')
print(f.read(3))
f.close()

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/文件的读操作.py
0
a,b

Process finished with exit code 0

5、非纯文本文件的读取:

示例1:

f = open('/home/kiosk/Desktop/111.jpg','wb')
content= f.read()
print(content)
f.close()


执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/非纯文本文件的读取.py
Traceback (most recent call last):
  File "/home/kiosk/PycharmProjects/面向对象/非纯文本文件的读取.py", line 2, in <module>
    content= f.read()
io.UnsupportedOperation: read

Process finished with exit code 1

四、上下文管理器

作用:可以同时打开两个文件,实现文件的复制

示例1:

with open('/test1/passwd','r+') as f1:
   content= f1.read()
print(content)

执行结果:
with open('/test1/passwd','r+') as f1:
   content= f1.read()
print(content)

示例2:进行文件内容的复制

with open('/test1/passwd','r') as f1,\
    open('/test1/passwd1','w+') as f2:
    f2.write(f1.read())
    f2.seek(0)
    content = f2.read()
print(content)

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/上下文管理.py
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
radvd:x:75:75:radvd user:/:/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
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
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
westos:x:1001:1001::/home/westos:/bin/bash


Process finished with exit code 0

五、系统

1、返回操作系统的类型

值为: posix 表示Linux系统,如果是nt,是Windos 操作系统

示例1:

import os
from os.path import  exists,splitext,join
print(os.name)

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/系统.py
posix

Process finished with exit code 0

2、操作系统的详细信息

示例1:

import os
from os.path import  exists,splitext,join
info = os.uname()
print(info)
print(info.sysname)
print(info.nodename)

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/系统.py
posix.uname_result(sysname='Linux', nodename='foundation68.ilt.example.com', release='3.10.0-514.el7.x86_64', version='#1 SMP Wed Oct 19 11:24:13 EDT 2016', machine='x86_64')
Linux
foundation68.ilt.example.com

Process finished with exit code 0

3、系统的环境变量

示例1:

import os
from os.path import  exists,splitext,join
print(os.environ)

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/系统.py
environ({'PATH': '/home/kiosk/PycharmProjects/面向对象/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/kiosk/.local/bin:/home/kiosk/bin', 'XAUTHORITY': '/run/gdm/auth-for-kiosk-xTSMoi/database', 'IMSETTINGS_MODULE': 'none', 'HISTCONTROL': 'ignoredups', 'XMODIFIERS': '@im=ibus', 'GDMSESSION': 'gnome-classic', 'DBUS_SESSION_BUS_ADDRESS': 'unix:abstract=/tmp/dbus-q9Qp3M9gD3,guid=ed40dc98ecb7202d0cc9747f5cada6d5', 'XDG_CURRENT_DESKTOP': 'GNOME-Classic:GNOME', 'MAIL': '/var/spool/mail/kiosk', 'SSH_AGENT_PID': '1821', 'SESSION_MANAGER': 'local/unix:@/tmp/.ICE-unix/1652,unix/unix:/tmp/.ICE-unix/1652', 'USERNAME': 'kiosk', 'LOGNAME': 'kiosk', 'PWD': '/home/kiosk/PycharmProjects/面向对象', 'PYCHARM_HOSTED': '1', 'WINDOWID': '29360135', 'PYTHONPATH': '/home/kiosk/PycharmProjects/面向对象', 'LESSOPEN': '||/usr/bin/lesspipe.sh %s', 'SHELL': '/bin/bash', 'QT_GRAPHICSSYSTEM_CHECKED': '1', 'OLDPWD': '/mnt/pycharm-community-2018.3/bin', 'GNOME_DESKTOP_SESSION_ID': 'this-is-deprecated', 'IMSETTINGS_INTEGRATE_DESKTOP': 'yes', 'XDG_SESSION_DESKTOP': 'gnome-classic', 'LS_COLORS': 'rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:', 'SHLVL': '3', 'QT_PLUGIN_PATH': '/usr/lib64/kde4/plugins:/usr/lib/kde4/plugins', 'QT_IM_MODULE': 'ibus', 'HISTSIZE': '1000', 'TERM': 'xterm-256color', 'XFILESEARCHPATH': '/usr/dt/app-defaults/%L/Dt', 'LANG': 'en_US.utf8', 'XDG_SESSION_ID': '1', 'DISPLAY': ':0', '_': '/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/jre/bin/java', 'GDM_LANG': 'en_US.utf8', 'PYTHONIOENCODING': 'UTF-8', 'DESKTOP_SESSION': 'gnome-classic', 'GPG_AGENT_INFO': '/run/user/1000/keyring/gpg:0:1', 'USER': 'kiosk', 'XDG_MENU_PREFIX': 'gnome-', 'WINDOWPATH': '1', 'VTE_VERSION': '3804', 'XDG_SEAT': 'seat0', 'SSH_AUTH_SOCK': '/run/user/1000/keyring/ssh', 'PYTHONUNBUFFERED': '1', 'HOSTNAME': 'foundation68.ilt.example.com', 'NLSPATH': '/usr/dt/lib/nls/msg/%L/%N.cat', 'GNOME_SHELL_SESSION_MODE': 'classic', 'KDEDIRS': '/usr', 'XDG_RUNTIME_DIR': '/run/user/1000', 'XDG_VTNR': '1', 'HOME': '/home/kiosk'})

Process finished with exit code 0

4、通过key值获取环境变量对应的value值

示例1:

import os
from os.path import  exists,splitext,join
print(os.environ.get('PATH'))

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/系统.py
/home/kiosk/PycharmProjects/面向对象/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/kiosk/.local/bin:/home/kiosk/bin

Process finished with exit code 0

5、判断路径是否绝对路径

示例1:

import  os
from os.path import  exists,splitext,join
print(os.path.isabs("/test1/passwd"))

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/判断是否为绝对路径.py
True

Process finished with exit code 0

6、进行绝对路径的生成

示例1:

import  os
from os.path import  exists,splitext,join    
print(os.path.abspath('111.png'))              ###在当前路径下生成绝对路径
print(os.path.join('/home/kiosk/','111.png'))  ###生成指定路径的绝对路径
print(os.path.join(os.path.abspath('.'),'111.png')) ###在当前的目录下生成绝对路径

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/判断是否为绝对路径.py
/home/kiosk/PycharmProjects/面向对象/111.png
/home/kiosk/111.png
/home/kiosk/PycharmProjects/面向对象/111.png

Process finished with exit code 0

7、获取目录名或者文件名

示例1:

import  os
from os.path import  exists,splitext,join
print(os.path.abspath('111.png'))
filename = '/home/kiosk/PycharmProjects/面向对象/111.png'
print(os.path.basename(filename))      ###获取文件名
print(os.path.dirname(filename))       ###获取文件所在的目录

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/判断是否为绝对路径.py
/home/kiosk/PycharmProjects/面向对象/111.png
111.png
/home/kiosk/PycharmProjects/面向对象

Process finished with exit code 0

8、进行目录的创建和目录的删除

示例1:

import  os
from os.path import exists,splitext,join
os.mkdir('img')                           ###进行目录的生成
os.makedirs('img/jpg/png')                ###进行地归目录的生成
os.rmdir('img')                           ###进行目录的生成

9、进行文件的创建和文件的删除

示例1:

import  os
from os.path import exists,splitext,join
os.mknod('hello.world')     ###进行文件的生成
os.remove('hello.world')    ###进行文件的删除

10、进行文件的重命名

示例1:

import  os
from os.path import exists,splitext,join
os.mknod('hello.world')                    ###进行文件的生成
os.rename('hello.world','hello.world1')    ###进行文件的重命名

11、判断文件或者目录是否存在

示例1:

import  os
from os.path import exists,splitext,join
print(os.path.exists('hello.world1'))

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/进行目录的创建.py
True

Process finished with exit code 0

12、进行文件名和文件名的后缀

示例1:

import  os
from os.path import exists,splitext,join
content=os.path.splitext('hello.world1')  ###进行文件名和后缀名的分离
print(type(content))                      ###查看分离后返回的类型,返回类型是一个元组
print(content[0])
print(content[1])

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/进行目录的创建.py
<class 'tuple'>
hello
.world1

Process finished with exit code 0

六、文件的相关练习

1、创建文件data.txt,文件共100000行,每行存放一个1~100之间的整数

"""
进行文件data.txt的建立,要求文件公100000,每行存放
一个1~100之间的
整数

题目分析:
1、首先进行文件的建立,我们打开文件使用"w+",如果文件存在,则进行打开
如果文件不存在,则进行建立
2、使用random 进行随机数的产生,使用for循环进行控制随机数生成
的个数,
3、在循环体中进行对文件的写入,即每循环一次将生成的随机数进行写入
该文件中,需要注意的是要进行类型的转换,因为文件写入只支持并进行换
字符串的类型,并且注意换行操作

"""
import random
f = open('data.txt','w+')
for i in range(10000):
    num = random.randint(1,100)
    f.write(str(num) + '\n')
f.close()


执行结果:
生成文件data.txt该文件中共10000行,每行为1~100之间的一个随机数,满足题目要求

2、在当前目录新建目录img, 里面包含100个文件, 100个文件名各不相同

(X4G5.png)  ,将当前img目录所有以.png结尾的后缀名改为.jpg.

1、

"""
1、在当前的目录下新建目录为img,里面包含100个文件,100个
文件名个不形同,如(X4G5.png)
2、将当前img目录所有的以png开头的改为.jpg
题目分析:
1、进行文件名的生成,经过观察我门可发现文件名是由而进制的字母加数子组成
的四位加上后缀名.img完成的,我我们先进行文件名的生成
2、进行目录的生成
3、使用for循环进行文件生成个数的控制,在img目录下进行文件的创建
"""
import string
import random
import os
from os.path import exists,splitext,join
num = string.ascii_letters + string.digits
def gen_file(len=4):                        ###定义函数进行文件名的生成
    return  ''.join(random.sample(num,len))
os.mkdir('img')
for i in range(100):
    num2= gen_file(len=4)
    os.mknod('img/'+num2 + '.png')


执行结果:
生成文件夹'img',并在img下生成100个文件,该文件名为四给而进制字符加上.png组成
满足题目要求

使用函数进行文件夹和目录的生成

"""
1、在当前的目录下新建目录为img,里面包含100个文件,100个
文件名个不形同,如(X4G5.png)
2、将当前img目录所有的以png开头的改为.jpg
题目分析:
1、进行文件名的生成,经过观察我门可发现文件名是由而进制的字母加数子组成
的四位加上后缀名.img完成的,我我们先进行文件名的生成
2、进行目录的生成
3、使用for循环进行文件生成个数的控制,在img目录下进行文件的创建
"""
import string
import random
import os
from os.path import exists,splitext,join
num = string.ascii_letters + string.digits
def gen_filename(len=4):
    return ''.join(random.sample(num,len))
def creat_dir(name):
     os.makedirs(name)

def creat_file(dirname,num):
    for i in range(num):
        num2 = gen_filename(len=4)
        os.mknod(dirname + '/' + num2 + '.png')
creat_dir('img')
creat_file('img',100)

执行结果:
生成文件夹'img',并在img下生成100个文件,该文件名为四给而进制字符加上.png组成
满足题目要求

(2)进行文件后缀名的修改

"""
题目要求:对指定目录下的特定文件的重命名,使用函数

题目分析:
1、进行函数名的参数的设定(参数包括目录名,需要修改的文件后缀名,文件的
修改后的后缀名)
2、首先判断该目录是否存在,使用os.path.exits,如果文件不存在进行报错
3、如果存在,对该目录下的文件进行过滤,找出需要修改的文件
4、对过滤后的文件进行煸历,将文件后缀名和文件名进行分离,将符合修改的
后缀名添加到一个列表
5、对筛选的文件中的后缀名进行煸历,对符合条件的后缀名的文件进行重新的命名
6、进行函数的调用
"""
import os
from os.path import exists,splitext,join
pngfile = []
def rename_filename(dir_name,old_suffix,new_suffix):
    if os.path.exists(dir_name):
       for filename in os.listdir(dir_name):
           if filename.endswith(old_suffix):
               pngfile.append(filename)

#        pngfile = filter(lambda filename:filename.endswith(old_suffix),os.listdir(dir_name))
       basfile= [os.path.splitext(filename)[0] for filename in pngfile]
       for filename in basfile:
            oldname = os.path.join(dir_name, filename + old_suffix)
            newname = os.path.join(dir_name, filename + new_suffix)
            os.rename(oldname, newname)
    else:
        print('文件不存在')

rename_filename('img','.png','.jpg')

执行结果:
img目录下的.png文件全部重命名为.jpg结尾的文件

3、生成一个大文件ips.txt,要求1200行,每行随机为172.25.254.0/24段的ip;

读取ips.txt文件统计这个文件中ip出现频率排前10的ip;

"""
题目要求:

生成一个大文件ips.txt,该文件的要求为1200行,每行随机为172.25.254.0/24
段的IP,读取ips.txt文件统计这个文件中IP出现的频率排名前10的IP

题目分析:
1、使用open进行文件的打开,使用'w+',当文件不存在时候可以进行文件的
创建,
2、使用for循环,进行对文件的写入,进行字符的拼接,网段后面的数字进行
随机数的生成。
3、对文件内容进行逐行煸历,进行文件的逐行煸历,使用with open('ips_txt') as f
for ip in f:。
3、进行排序函数的编辑
4、使用sorted函数进行所有的IP出现的次数进行从小到大的排序
5、对排好的列表进行切片操作,找出排名故后10的IP
"""
import random
import os
f = open('ips.txt','w+')
content = []
for i in range(1200):
    num = random.randint(0,255)
    num2 = '172.25.254.' + str(num)
    f.writelines(num2 + '\n')

def count_ip(x):
    return x[1]

dict_ip1 = {}
with open('ips.txt') as f:
    for ip in f :
        if ip not in dict_ip1:
            dict_ip1[ip] = 1
        else:
            dict_ip1[ip] += 1
list_ip = sorted(dict_ip1.items(),key=count_ip)
result_ip = list_ip[::-1][:10]
print(result_ip)

执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/进行ip地址的生成.py
[('172.25.254.169\n', 12), ('172.25.254.59\n', 12), ('172.25.254.13\n', 11), ('172.25.254.121\n', 11), ('172.25.254.193\n', 10), ('172.25.254.18\n', 10), ('172.25.254.240\n', 10), ('172.25.254.70\n', 10), ('172.25.254.196\n', 9), ('172.25.254.73\n', 9)]

Process finished with exit code 0

4、生成100个MAC地址并写入文件中,MAC地址前6位(16进制)为01-AF-3B
01-AF-3B
01-AF-3B-xx
01-AF-3B-xx-xx
01-AF-3B-xx-xx-xx

'''
生成100个mac的地址,mac地址前六位(16进制)为 01-AF-3B
01-AG-3B
01-AF-3B-XX
01-AF-3B-XX-XX
01-AF-3B-XX-XX-XX

进行题目分析:
1、分为两个部分,第一部分生成mac玛格式的生成,第二个部分将生成的
mac的格式写入文件
2、进行mac格式的生成,使用函数,导入string,使用for循环进行生成指定格式的mac玛
3、使用for新欢进行格式文件的写入,进行函数的调用
'''
import string
import random
def create_mac():
    MAC = '01-AF-3B'
    key_name =string.hexdigits
    for i in range(3):
        n = random.sample(key_name,2)
        sn = '-' + ''.join(n).upper()
        MAC+= sn
    return MAC

def main():
    with open('mac.txt','w') as f:
        for i in range(100):
            mac = create_mac()
            print(mac)
            f.write(mac + '\n')
main()


执行结果:
/home/kiosk/PycharmProjects/面向对象/venv/bin/python /home/kiosk/PycharmProjects/面向对象/进行mac地址的生成.py
01-AF-3B-B1-E0-F9
01-AF-3B-68-1A-D2
01-AF-3B-AF-AB-EF
01-AF-3B-BF-08-62
01-AF-3B-83-9E-D0
01-AF-3B-AD-92-DD
01-AF-3B-5A-BF-CB
01-AF-3B-EF-5F-91
01-AF-3B-FB-6F-A4
01-AF-3B-CA-BB-AF
01-AF-3B-B6-52-7A
01-AF-3B-CC-AB-CA
01-AF-3B-83-CB-06
01-AF-3B-B3-DF-C6
01-AF-3B-EA-F0-4D
01-AF-3B-87-D3-7C
01-AF-3B-5C-FC-3E
01-AF-3B-BC-AD-CB
01-AF-3B-CD-7A-9E
01-AF-3B-F2-6F-A9
01-AF-3B-AC-D1-DF
01-AF-3B-5D-F7-BC
01-AF-3B-D0-EC-9F
01-AF-3B-4A-D7-BB
01-AF-3B-ED-36-B3
01-AF-3B-AE-3E-48
01-AF-3B-B6-8D-C1
01-AF-3B-7C-B7-EE
01-AF-3B-B9-30-C0
01-AF-3B-FB-0C-DA
01-AF-3B-C1-DF-A3
01-AF-3B-15-E0-BB
01-AF-3B-BA-68-09
01-AF-3B-94-39-E1
01-AF-3B-9B-BF-DE
01-AF-3B-EB-0C-A0
01-AF-3B-A8-F5-97
01-AF-3B-80-49-8A
01-AF-3B-8F-BD-2B
01-AF-3B-EB-0C-F3
01-AF-3B-CB-4F-FC
01-AF-3B-80-1E-C5
01-AF-3B-0C-DF-BF
01-AF-3B-FC-C2-6E
01-AF-3B-78-AE-B2
01-AF-3B-75-57-65
01-AF-3B-A8-CF-C1
01-AF-3B-D7-65-C5
01-AF-3B-65-F9-9B
01-AF-3B-BD-68-81
01-AF-3B-4F-FC-47
01-AF-3B-D1-74-09
01-AF-3B-CD-FE-5C
01-AF-3B-6C-A2-95
01-AF-3B-53-0F-1F
01-AF-3B-3C-1C-A5
01-AF-3B-BE-E2-5F
01-AF-3B-41-B6-F0
01-AF-3B-9D-F8-AF
01-AF-3B-17-FE-C0
01-AF-3B-B2-AF-BF
01-AF-3B-C6-2C-0C
01-AF-3B-C6-D0-D7
01-AF-3B-DC-62-B7
01-AF-3B-8F-EE-5E
01-AF-3B-31-80-BC
01-AF-3B-17-F9-25
01-AF-3B-FC-4C-87
01-AF-3B-51-D4-8E
01-AF-3B-6F-EF-8E
01-AF-3B-3F-B0-BE
01-AF-3B-F3-0F-E7
01-AF-3B-63-ED-52
01-AF-3B-AB-4E-DF
01-AF-3B-E1-FC-F2
01-AF-3B-C7-7F-CF
01-AF-3B-2B-86-B0
01-AF-3B-9C-7C-8B
01-AF-3B-7D-59-0D
01-AF-3B-53-A3-6B
01-AF-3B-3C-F1-E5
01-AF-3B-B9-4C-2D
01-AF-3B-02-86-C4
01-AF-3B-D5-84-D5
01-AF-3B-BC-DA-DF
01-AF-3B-FA-5F-F4
01-AF-3B-BA-A5-1C
01-AF-3B-F9-A0-CF
01-AF-3B-3E-2D-9D
01-AF-3B-1A-F1-B4
01-AF-3B-D4-DE-6F
01-AF-3B-C0-FB-AD
01-AF-3B-CB-DA-84
01-AF-3B-A7-7C-BA
01-AF-3B-CA-ED-AE
01-AF-3B-D3-C3-C1
01-AF-3B-58-BA-29
01-AF-3B-8F-92-19
01-AF-3B-1E-80-C8
01-AF-3B-ED-A2-EA

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/weixin_43831670/article/details/89076265