码迷,mamicode.com
首页 > 其他好文 > 详细

4-文件与os

时间:2021-03-15 10:54:22      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:rename   main   rem   method   文件备份   读写   注释   ups   end   

文件备份与重命名

# 2种方式打开文件、备份文件、
import os


# 打开文件
class FileOpen:
    @staticmethod
    def file_open1(file):
        fp = open(file, "w+", encoding="utf-8")
        # 无需flush,因为close自带flush,with open自带close
        # fp.flush()
        fp.close()

    @staticmethod
    def file_open2(file):
        with open(file, w+, encoding=utf-8) as f:
            data = f.readlines()
        # 无需close,因为with背后是上下文管理器自带close。


# 备份
class FileBackup:
    @staticmethod
    def backups(old_name):
        index = old_name.rfind(.)
        # 提取后缀,index是.的位置数
        postfix = old_name[index:] if index > 0 else ""
        new_name = old_name[:index] + [备份] + postfix
        old_f = open(old_name, rb)
        new_f = open(new_name, wb)
        while True:
            con = old_f.read(1024)
            if len(con) == 0:
                break
            new_f.write(con)
        old_f.close()
        new_f.close()


class BatchRename:
    # 固定名开头
    @staticmethod
    def batch_rename(flag=1):
        file_list = os.listdir()
        print(file_list)
        for i in file_list:
            # flag=1重命名0取消重命名(只有重命名完才能取消,直接取消是犯罪!!)
            new_name = Python_ + i if flag == 1 else i[len(Python_):]
            os.rename(i, new_name)

    # 顺序的数字开头
    @staticmethod
    def rename_(flag=1):
        file_list = os.listdir()
        if flag == 1:
            for i, j in zip(file_list, range(1, 6)):
                new_name = str(j) + "." + i
                os.rename(i, new_name)
        else:
            for i in file_list:
                new_name = i[2:]
                os.rename(i, new_name)

    # 前缀换成罗马数字
    @staticmethod
    def rename2_(flag=1):
        file_list = os.listdir()
        file_list.sort(key=lambda x: int(x[:1]))  # 默认就是根据第一位排序,后面是负数则倒数排序
        print(file_list)
        prefix = [I_, II_, III_, IV_, V_, VI_, VII_, VIII_, IX_, X_]
        if flag == 1:
            for i, j in zip(file_list, prefix):
                new_name = j + i[2:]
                os.rename(i, new_name)  # 改哪个路径就放哪个路径下。
        else:
            for i in file_list:
                new_name = i[2:]
                os.rename(i, new_name)

    # 前缀用英文代替罗马数字:先按照prefix里的顺序排序,再切割。
    @staticmethod
    def rename3_(flag=1):
        file_list = os.listdir()
        prefix = [I_, II_, III_, IV_, V_, VI_, VII_, VIII_, IX_, X_]
        new_order = []
        # 1.构造顺序。犯下的错:1.用zip,zip是一一对应的,这里得用双循环;2.i,j顺序反了导致和原列表一致。我真是个天才。
        for j in prefix:
            for i in file_list:
                if i.startswith(j):
                    new_order.append(i)

        # 2.去掉原来的前缀用新的前缀
        char_list = [chr(i) for i in range(ord("a"), ord("z"))]
        for n, c in zip(new_order, char_list):
            index = n.find("_")
            new_name = c + n[index:]
            os.rename(n, new_name)


if __name__ == __main__:
    FileBackup.backups("test.txt")

批量重命名

# 批量重命名

import os


# 固定名开头
def batch_rename(flag=1):
    file_list = os.listdir()
    print(file_list)
    for i in file_list:
        # flag=1重命名0取消重命名(只有重命名完才能取消,直接取消是犯罪!!)
        new_name = Python_ + i if flag == 1 else i[len(Python_):]
        os.rename(i, new_name)


# 顺序的数字开头
def rename_(flag=1):
    file_list = os.listdir()
    if flag == 1:
        for i, j in zip(file_list, range(1, 6)):
            new_name = str(j) + "." + i
            os.rename(i, new_name)
    else:
        for i in file_list:
            new_name = i[2:]
            os.rename(i, new_name)


# 前缀换成罗马数字
def rename2_(flag=1):
    file_list = os.listdir()
    file_list.sort(key=lambda x: int(x[:1]))  # 默认就是根据第一位排序,后面是负数则倒数排序
    print(file_list)
    prefix = [I_, II_, III_, IV_, V_, VI_, VII_, VIII_, IX_, X_]
    if flag == 1:
        for i, j in zip(file_list, prefix):
            new_name = j + i[2:]
            os.rename(i, new_name)  # 改哪个路径就放哪个路径下。
    else:
        for i in file_list:
            new_name = i[2:]
            os.rename(i, new_name)


# 前缀用英文代替罗马数字:先按照prefix里的顺序排序,再切割。
def rename3_(flag=1):
    file_list = os.listdir()
    prefix = [I_, II_, III_, IV_, V_, VI_, VII_, VIII_, IX_, X_]
    new_order = []
    # 1.构造顺序。犯下的错:1.用zip,zip是一一对应的,这里得用双循环;2.i,j顺序反了导致和原列表一致。我真是个天才。
    for j in prefix:
        for i in file_list:
            if i.startswith(j):
                new_order.append(i)

    # 2.去掉原来的前缀用新的前缀
    char_list = [chr(i) for i in range(ord("a"), ord("z"))]
    for n, c in zip(new_order, char_list):
        index = n.find("_")
        new_name = c + n[index:]
        os.rename(n, new_name)


if __name__ == __main__:
    # batch_rename()
    # rename_(0)
    # rename2_()
    rename3_()

os操作文件

# os操作文件/包

import os

os.rename(1.txt, 10.txt)
os.remove(10.txt)
os.mkdir(aa)
os.rmdir(aa)
os.chdir(aa)
print(os.getcwd())
print(os.listdir())
print(os.listdir(aa))
print(os.path.dirname(os.path.abspath(__file__)))  # 当前文件的所在文件夹的绝对路径

读写模式

# readlines()读写文件

def write_file():
    with open("test.txt", "a") as f:
        f.write("\n" + "e" * 5)


def read_file():
    with open("test.txt", "r") as f:
        print(f.read(13))  # 读10个字符(注意换行符\n算一个),read不写参数表示读取所有
        data = f.readlines()[2:]  # 按行读,因为是列表类型,所以可以切片
        # data1 = f.readlines(6)  # 按字节读,若超出当前行字节数则读完下一行,运行时需要把另一行注释掉
    print(data)


if __name__ == __main__:
    # write_file()
    read_file()

"""
x    写模式,新建一个文件,如果该文件已存在则会报错。
b    二进制模式。
+    打开一个文件进行更新(可读可写)。
r    以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb    以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+    打开一个文件用于读写。文件指针将会放在文件的开头。
rb+    以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w    打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb    以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+    打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+    以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+    打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
"""

seek改变指针

# seek(offset, start)改变指针位置,0开头1当前2结尾


f = open(test.txt, r+)
f.seek(2)
con = f.read()  # 换行没问题,
print(con)
f.close()

"""
seek(offset[, whence])
offset -- 开始的偏移量,也就是代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始。
whence:可选,默认值为 0。给 offset 定义一个参数,表示要从哪个位置开始偏移;0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。
"""

 

4-文件与os

标签:rename   main   rem   method   文件备份   读写   注释   ups   end   

原文地址:https://www.cnblogs.com/teark/p/14527151.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!