Python学习(十一):文件的读写操作

文件操作

我们linux中使用python时是可以对linux中的文件系统进行读写操作的,当然其他例如windows系统同样适于
首先我们为了系统中文件的不损坏,我们将以/etc/passwd文件为示例,我们将其符之到/tmp下
在这里插入图片描述
现在我们对齐进行操作,需要注意的是我们必须得经历三个步骤打开——>操作——>关闭
示例:

#打开文件
f = open('/tmp/passwdd','w')
#读操作
# content = f.read()
# print(content)
# print(f.writable())
# print(f.readable())

#写操作
f.write('hello')

#关闭
f.close()

在这里插入图片描述
在这里的报错是因为我们对文件的操作是"w",是只写的,所以会报错,还有一种可能出现的报错是文件权限的问题,其报错和shell中很类似
在这里插入图片描述
在这里插入图片描述

文件的读写

在前面我们看到了w是只读,下面给大家介绍一下其所有的读写操作配置

r:(默认)
    -只能读,不能写
    -读取的文件不存在,会报错
    
r+:
    -可以执行读写操作
    -文件不存在,报错
    -默认情况下,从文件指针所在位置开始写入

w:
    -write only
    -会清空文件之前的内容
    -文件不存在,不会报错,会创建新的文件并写入


w+:
    -rw
    -会清空文件内容
    -文件不存在,不报错,会创建新的文件

a:
    -write only
    -不会清空文件内容
    -文件不存在,会报错


a+:
    -rw
    -不清空文件内容,在末尾追加
    -文件不存在,不报错

我们重新恢复passwd文件,然后来看看文件中的指针

f = open('/tmp/passwd','r+')

#查看当前指针所在的位置
print(f.tell())
f.write('python')

print(f.tell())
content = f.read()
print(content)

f.close()

在这里插入图片描述首先我们打开文件后其默认的指针在0,当我们通过覆盖开头的root:x为python后指针到了6,所以我们最后大引出文件内容时时没有python的,因为它打印的时从指针开始的

文件的读取操作

readlines():读取文件内容,返回一个列表,列表的元素分别为文件行内容
在这里插入图片描述
需要注意的是默认情况下读取文件的所有内容,小文件可以直接用read读取,如果是大文件(文件大小>内存大小),不能通过read一次性读取所有内容
文件的写操作
在这里插入图片描述
移动文件指针

在这里插入图片描述
seek方法,移动指针
seek的第一个参数是偏移量:>0,表示向右移动,<0表示向左移动
seek的第二个参数是:
0:移动指针到文件开头
1:不移动指针
2:移动指针到末尾

非纯文本文件的读取

**我们之前读取的所有文件都是纯文本文件,那么我们也会遇到很多非纯文本文件的读取,例如图片等,其实那些都可以理解为二进制文件的读取
读取二进制文件:rb rb+ wb wb+ ab ab+
**
在这里插入图片描述

使用with打开文本

首先我们可以不用使用每次都使用open和close,这样是的很麻烦,我们可以使用一种新的文本打开方式with
在这里插入图片描述

上下文管理器

我们在一些时候需要同时对两个文件进行操作,这是我们是可以使用with同时打开两个文件对其进行操作的

with open('/tmp/passwd') as f1,\
    open('/tmp/passwd1','w+') as f2:
    #将第一个文件的内容写入第二个文件中
    f2.write(f1.read())
    #移动指针到文件最开始
    f2.seek(0)
    #读取文件内容
    print(f2.read())

在这里插入图片描述
在这里需要注意的是我们的passwd1本来是没有的,我们通过write将passwd的内容写入到新的passwd1中

python对于操作系统

1.返回操作系统类型
在这里插入图片描述
2.操作系统的详细信息
在这里插入图片描述
3.系统环境变量
在这里插入图片描述
4,通过key值获得相应的value值
在这里插入图片描述
5.判断是否为绝对路径
在这里插入图片描述
6.生成绝对路径
在这里插入图片描述
7。获取目录名或文件名
在这里插入图片描述
8.创建目录/删除目录
在这里插入图片描述
注意,如果目录下还有目录的话python时不可以用rmdir递归删除目录的
9.创建文件/删除文件
在这里插入图片描述
10.文件重命名
在这里插入图片描述
11.判断文件或目录是否存在

在这里插入图片描述
12.分离后缀名和文件名
在这里插入图片描述
13.分离目录名和文件名
在这里插入图片描述

文件系统练习

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

import random

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

f.seek(0)
print(f.read())
f.close()

在这里插入图片描述
2. 在当前目录新建目录img, 里面包含100个文件, 100个文件名
各不相同(X4G5.png)

def gen_code(len=4):
    #随机生成4位验证码
    li = random.sample(string.ascii_letters + string.digits,len)
    #将列表元素拼接为字符串
    return ''.join(li)


def create_files():
    #随机生成100个验证码
    li = [gen_code() for i in range(100)]
    os.mkdir('img')
    for name in li:
        os.mknod('img/' + name + '.png')

# create_files()

在这里插入图片描述
在这里插入图片描述
再上一题的基础上,将当前img目录所有以.png结尾的后缀名改为.jpg.

import random
import os
import string

def modify_suffix(dirname,old_suffix,new_suffix):
    """

    :param dirname: 要操作的目录
    :param old_suffix: 之前的后缀名
    :param new_suffix: 新的后缀名
    :return:
    """
    if os.path.exists(dirname):
        #找出所有以old_suffix结尾的文件名
        pngfile = filter(lambda filename:filename.endswith(old_suffix),os.listdir(dirname))

        #将文件名和后缀分开
        basefiles = [os.path.splitext(filename)[0] for filename in pngfile]

        #文件重命名
        for filename in basefiles:
            oldname = os.path.join(dirname,filename+old_suffix)
            newname = os.path.join(dirname,filename+new_suffix)
            os.rename(oldname,newname)
            print('%s重命名为%s成功' %(oldname,newname))

    else:
        print('%s不存在,无法操作...' %dirname)


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

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42446031/article/details/89243712