0
点赞
收藏
分享

微信扫一扫

【Java】导入新项目,报错 java: JDK isn‘t specified for module

自信的姐姐 03-28 07:00 阅读 3

我们已经研究了Python语言的众多内容,现在我们将来学习一下怎么把这些内容结合起来。我

们将设计编写一个能够 做 一些确实有用的事情的程序。

提出问题

我想要一个可以为我的所有重要文件创建备份的程序。

尽管这是一个简单的问题,但是问题本身并没有给我们足够的信息来解决它。进一步的分析是

必需的。例如,我们如何确定该备份哪些文件?备份保存在哪里?我们怎么样存储备份?

在恰当地分析了这个问题之后,我们开始设计我们的程序。我们列了一张表,表示我们的程序

应该如何工作。对于这个问题,我已经创建了下面这个列表以说明 我 如何让它工作。如果是

你设计的话,你可能不会这样来解决问题——每个人都有其做事的方法,这很正常。

1. 需要备份的文件和目录由一个列表指定。

2. 备份应该保存在主备份目录中。

3. 文件备份成一个zip文件。

4. zip存档的名称是当前的日期和时间。

5. 我们使用标准的zip命令,它通常默认地随Linux/Unix发行版提供。Windows用户可以使

用Info-Zip程序。注意你可以使用任何地存档命令,只要它有命令行界面就可以了,那

样的话我们可以从我们的脚本中传递参数给它。

解决方案

# Filename: backup_ver1.py
import os
import time

# 1. 在列表中指定需要备份的文件和目录。
source = ['/home/swaroop/byte', '/home/swaroop/bin']
# 如果是windows操作系统
# use source = [r'C:\Documents', r'D:\Work'] 


# 2. 备份文件必须保存在主备份目录下
target_dir = '/mnt/e/backup/' # Remember to change this to what you will be using


# 3. 这些文件被备份成一个zip文件
# 当前日期为主目录下子目录的名称
today = target_dir + time.strftime('%Y%m%d')

# 当前时间是zip归档文件的名称
now = time.strftime('%H%M%S')

# 获取用户的注释来创建zip文件的名称
comment = raw_input('Enter a comment --> ')
if len(comment) == 0: # check if a comment was entered
 target = today + os.sep + now + '.zip'
else:
 target = today + os.sep + now + '_' + \
 comment.replace(' ', '_') + '.zip'
 
# 如果子目录尚未存在,则创建子目录
if not os.path.exists(today):
 os.mkdir(today) # 创建目录
 print 'Successfully created directory', today

# 4. 使用zip命令(在Unix/Linux中)将文件放入zip存档中
zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))
# 执行备份
if os.system(zip_command) == 0:
 print 'Successful backup to', target
else:
 print 'Backup FAILED'

######
输出
$ python backup_ver1.py
Enter a comment --> added new examples
Successful backup to /mnt/e/backup/20240308/082156_added_new_examples.zip
$ python backup_ver1.py
Enter a comment -->
Successful backup to /mnt/e/backup/20240308/082316.zip

我们使用了os和time模块,所以我们输入它们。然后,我们在source列表中指定需要备份的文

件和目录。目标目录是我们想要存储备份文件的地方,它由target_dir变量指定。zip归档的名称

是目前的日期和时间,我们使用time.strftime()函数获得。它还包括.zip扩展名,将被保存在

target_dir目录中。 time.strftime()函数需要我们在上面的程序中使用的那种定制。%Y会被无世纪的年份所替代。%m会被01到12之间的一个十进制月份数替代,其他依次类推。这些定制的详细情况可以在 《Python参考手册》中获得。《Python参考手册》包含在你的Python发行版中。注意这些定制 与用于print语句的定制(%后跟一个元组)类似(但不完全相同)

我们使用加法操作符来级连字符串,即把两个字符串连接在一起返回一个新的字符串。通过

这种方式,我们创建了目标zip文件的名称。接着我们创建了zip_command字符串,它包含我们

将要执行的命令。你可以在shell(Linux终端或者DOS提示符)中运行它,以检验它是否工作。

zip命令有一些选项和参数。-q选项用来表示zip命令安静地工作。-r选项表示zip命令对目录递

归地工作,即它包括子目录以及子目录中的文件。两个选项可以组合成缩写形式-qr。选项后

面跟着待创建的zip归档的名称,然后再是待备份的文件和目录列表。我们使用已经学习过的

字符串join方法把source列表转换为字符串。

最后,我们使用os.system函数 运行 命令,利用这个函数就好像在 系统 中运行命令一样。即在

shell中运行命令——如果命令成功运行,它返回0,否则它返回错误号。

根据命令的输出,我们打印对应的消息,显示备份是否创建成功。好了,就是这样我们已经创

建了一个脚本来对我们的重要文件做备份!

给Windows用户的注释

你可以把source列表和target目录设置成任何文件和目录名,但是在Windows中你得小心一些。

问题是Windows把反斜杠(\)作为目录分隔符,而Python用反斜杠表示转义符!

所以,你得使用转义符来表示反斜杠本身或者使用自然字符串。例如,使用'C:\\Documents'或

r'C:\Documents'而不是'C:\Documents'——你在使用一个不知名的转义符\D!

现在我们已经有了一个可以工作的备份脚本,我们可以在任何我们想要建立文件备份的时候使

用它。建议Linux/Unix用户使用前面介绍的可执行的方法,这样就可以在任何地方任何时候运

行备份脚本了。这被称为软件的实施环节或开发环节。

举报

相关推荐

0 条评论