Python - 使用运算符在使用类时分配文件名

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号线真的很长,任何关于如何缩短它的提示都很受欢迎.

谢谢达伦

ste*_*eha 5

如果您只想备份文件,我建议您使用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是在一个单一的块读取最高金额.这样,如果您在内存有限的计算机上备份一个非常大的文件,它将只是工作而不是填充计算机的内存并使计算机开始交换到磁盘.

  • 很好的解释.你唯一没有提到的是`%s`占位符只能用'%`运算符,而`{}`占位符只能用`format`方法,你不能把它们混合起来.(你的代码显然暗示了这一点,但我并不是100%肯定新手会把它拿起来.) (2认同)
  • @Darren:根据您配置的大量不同,最佳CHUNK_SIZE可以是2KB到8MB.一次复制2.6MB文件就足够了.还是,最好让'shutil'为你找出难得的东西,而不是自己去做,对吧? (2认同)