标签: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操作文件/包 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(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 代表从文件末尾算起。 """
标签:rename main rem method 文件备份 读写 注释 ups end
原文地址:https://www.cnblogs.com/teark/p/14527151.html