Dar*_*nes 0 python class operators
我是一个Python /编程新手,我试图第一次使用python类.
在这段代码中,我试图创建一个脚本来备份一些文件.我总共有6个文件,我想用这个脚本定期备份,所以我想我会尝试使用python类来保存我写出来的东西6次,并且还可以使用Classes进行练习.
在我的下面的代码中,我已经设置了一些东西,仅用于创建一个类的实例来进行测试.但是,我遇到了麻烦.我似乎无法使用运算符分配原始文件名和备份文件名.
打开文件时是否无法使用运算符作为文件名?或者我做错了什么.
class Back_up(object):
def __init__(self, file_name, back_up_file):
self.file_name = file_name
self.back_up_file = back_up_file
print "I %s and me %s" % (self.file_name, self.back_up_file)
with open('%s.txt', 'r') as f, open('{}.txt', 'w') as f2 % (self.file_name, self.back_up_file):
f_read = read(f)
f2.write(f_read)
first_back_up = Back_up("syn1_ready", "syn1_backup")
Run Code Online (Sandbox Code Playgroud)
另外,7号线真的很长,任何关于如何缩短它的提示都很受欢迎.
谢谢达伦
如果您只想备份文件,我建议您使用shutil.copy()
吗?
至于你的计划:
如果要在字符串中替换以构建文件名,则可以执行此操作.但是你的代码没有这样做.
你有这个:
with open('%s.txt', 'r') as f, open('{}.txt', 'w') as f2 % (self.file_name, self.back_up_file):
Run Code Online (Sandbox Code Playgroud)
试试这个:
src = "%s.txt" % self.file_name
dest = "{}.txt".format(self.back_up_file)
with open(src, "rb") as f, open(dest, "wb") as f2:
# copying code goes here
Run Code Online (Sandbox Code Playgroud)
该%
运营商在一根绳子上运行.该.format()
方法的调用是一个字符串的方法.无论哪种方式,您都需要使用字符串进行操作; 你不能有两个with
语句,然后尝试在with
语句行的末尾使用这些运算符.
您不必像我在此处所示使用显式临时变量,但这是使代码易于阅读的好方法,同时大大缩短了with
语句行的长度.
复制文件的代码会一次将所有文件数据读入内存.这对于一个小文件来说没问题.对于大文件,你应该使用一个循环,调用.read(CHUNK_SIZE)
地方CHUNK_SIZE
是在一个单一的块读取最高金额.这样,如果您在内存有限的计算机上备份一个非常大的文件,它将只是工作而不是填充计算机的内存并使计算机开始交换到磁盘.