首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如此隐秘的信息!在编程界只有Python能破解!不服不行!

在这个项目中,你将学习怎么运用Python库和文档来解码一个文档中的秘密音讯。

1. 项目背景

一天早上,我找不到房子的钥匙了,不久我收到朋友发来的信息,信息上说:“你房子的钥匙被咱们藏起来了,要找到钥匙有必要解决一个谜题,在你的电脑上有一个文件夹,里边有很多张相片,当相片的文件名中的数字被移除时,这些重命名后的相片会显露出一个隐秘的信息,它能够指引你找到房子的钥匙”。

逐个命名这50张相片会花上好长时间,所以我有必要在我朋友回来之前想办法解决这个谜题。

2. 项目方针

写一个程序,移除相片称号中的数字,使得重新命名后的相片显现出一个隐秘的信息。

翻开文件夹,里边大约有50张相片,现在相片的顺序是乱的,无法得知其隐含的隐秘音讯:

运用程序去除文件称号中的数字后,你将得到这样的相片顺序:

这些重命名后的相片显露出了一个隐秘的信息:

请点击此处输入图片描述

KEYS ARE IN THE CLOSET. BEHIND THE SHOE BOX.

请点击此处输入图片描述

3. 代码完成

思考怎么编写这个程序呢?需求几个进程?其实就两个进程:

1. 翻开文件夹,并获取文件的文件称号

2. 给这些文件重命名,去除文件称号中的数字

# -*- coding:utf-8 -*-

# 导入 os 模块

import os

def rename_files():

'''

函数用于获取文件的文件称号,并去除文件称号中指定的数字

'''

# 第一步:从文件夹获取文件的文件称号

rename_list = os.listdir(r"/Users/cunxi/Python_Project/private_news/prank")

# 获取当时的作业目录

saved_path = os.getcwd()

# 打印作业目录

print('当时的作业目录是:' + saved_path)

# 切换当时的作业目录至要命名文件的地点目录

os.chdir(r'/Users/cunxi/Python_Project/private_news/prank')

# 第二步:针对列表中每一个文件的文件称号,去除数字,对其重新命名

for rename_file in rename_list:

# 打印重命名前的文件的文件称号

print("原始文件称号:" + rename_file)

# 去除文件称号中的数字,对其重命名

os.rename(rename_file,rename_file.translate(None,'0123456789'))

# 打印重命名后的文件的文件称号

print("重命名后的文件称号:" + rename_file.translate(None,'0123456789'))

# 履行函数

rename_files()

在输出区能够看到输出成果,返回到之前的文件夹中,检查文件,发现现已被成功重命名:

经过代码,咱们破解了朋友的隐秘信息,找到了自己的钥匙被藏在哪里了:

KEYS ARE IN THE CLOSET. BEHIND THE SHOE BOX.

假如需求程序用到的相片,请访问https://github.com/cunxi1992/private_news,文件夹original_prank。

假如关于代码中的部分完成和句子有疑问,例如,为什么要切换作业目录?能够翻到后边看附录,附上了代码的完成进程。假如理解的,就不用看了。

4. 用到的库和办法

1. os文件

os文件的其他办法请检查os文档,地址:https://docs.python.org/3.6/library/os.html

2. os.listdir()

办法用于返回指定的文件夹包含的文件或文件夹称号的** 列表 ** 。

3. translat()

字符串函数translat()接纳2个参数,第一个参数是一个数据表,其能将一个字符集转译程另一个字符集,咱们这儿不需求,因而能够运用关键字None。第二个参数是一个列表,包含了咱们想要从字符串中移除的一切字符,这儿指的是那些数字,也就是0-9

请点击此处输入图片描述

4. os.getcwd()

该办法返回当时作业目录。

5. os.chdir()

该办法改动当时的作业目录

5. 附录:具体完成进程

思考怎么编写这个程序呢?需求几个进程?其实就两个进程:

1. 翻开文件夹,并获取文件的文件称号

2. 给这些文件重命名,去除文件称号中的数字

1. 翻开文件夹,并获取文件的文件称号

咱们Google一下怎么获取文件中的文件称号,发现有一个os模块的listdir()可用,

# -*- coding:utf-8 -*-

# 导入 os 模块

import os

def rename_files():

'''

函数用于获取文件的文件称号,并去除文件称号中指定的数字

'''

# 第一步:从文件夹获取文件的文件称号

rename_list = os.listdir(r"/Users/cunxi/Python_Project/private_news/prank")

print(rename_list)

# 第二步:针对每一个文件的文件称号,去除数字,对其重新命名

rename_files()

打印输出,证明os.listdir()是否可用:

['68pune.jpg', '45ithaca.jpg', '47london.jpg', ...]

尽管输出成果不是那么美观,但确实证明os.listdir()可用。

下面,咱们开始做第二步,去除文件称号中的数字,给文件称号重命名。

2.给这些文件重命名,去除文件称号中的数字

咱们检查os文档,有一个叫rename(src,dst,src_dir_fd=None, dst_dir_fd=None)函数,它能够读取文件的来历或许当时称号,并将其改为方针地址或更改为新的称号。

咱们要给50张相片重命名,因而这儿要用到for循环:

# -*- coding:utf-8 -*-

# 导入 os 模块

import os

def rename_files():

'''

函数用于获取文件的文件称号,并去除文件称号中指定的数字

'''

# 第一步:从文件夹获取文件的文件称号

rename_list = os.listdir(r"/Users/cunxi/Python_Project/private_news/prank")

# 第二步:针对列表中每一个文件的文件称号,去除数字,对其重新命名

for rename_file in rename_list:

os.rename(rename_file,rename_file.translate(None,'0123456789'))

rename_files()

rename_file 是文件的原始称号,rename_file.translate(None,'0123456789')是去除文件称号中的数字,以达到重命名的目的。

字符串函数 translat() 接纳2个参数,

第一个参数是一个数据表,其能将一个字符集转译程另一个字符集,咱们这儿不需求,因而能够运用关键字None。

第二个参数是一个列表,包含了咱们想要从字符串中移除的一切字符,这儿指的是那些数字,也就是0123456789

运行上述代码:

Traceback (most recent call last):

File "/Users/cunxi/Python_Project/private_news/private_news.py", line 17, in

rename_files()

File "/Users/cunxi/Python_Project/private_news/private_news.py", line 14, in rename_files

os.rename(rename_file,rename_file.translate(None,'0123456789'))

OSError: [Errno 2] No such file or directory

错误显现找不到文件,显现是os.rename()呈现了问题,可能是咱们在重命名文件称号时,程序浏览的文件夹中找不到要命名的文件。

大白话解说就是:程序想对列表rename_list中文件称号为ABC进行重命名,所以在当时作业目录找这个文件,但是却找不到。有必要找到要重命名文件的文件夹才能给文件重命名。

因而,咱们获取下当时的作业目录看一下,看当时的作业目录和要重命名文件的作业目录是否相同。

os.getcwd()办法获取当时的作业目录:

# -*- coding:utf-8 -*-

# 导入 os 模块

import os

def rename_files():

saved_path = os.getcwd()

# 打印作业目录

print('当时的作业目录是:' + saved_path)

rename_files()

成果显现作业目录是:

当时的作业目录是:/Users/cunxi/Python_Project/private_news

而咱们要重命名的文件在 /Users/cunxi/Python_Project/private_news/prank,两个目录不相同,程序在文件夹private_news中找不到要命名的文件,所以程序才报错。

为了解决这个问题,需求将当时的作业目录 切换至 /Users/cunxi/Python_Project/private_news/prank,能够运用办法os.chdir()。

# -*- coding:utf-8 -*-

# 导入 os 模块

import os

def rename_files():

'''

函数用于获取文件的文件称号,并去除文件称号中指定的数字

'''

# 第一步:从文件夹获取文件的文件称号

rename_list = os.listdir(r"/Users/cunxi/Python_Project/private_news/prank")

# 获取当时的作业目录

saved_path = os.getcwd()

# 打印作业目录

print('当时的作业目录是:' + saved_path)

# 切换当时的作业目录至要命名文件的地点目录

os.chdir(r'/Users/cunxi/Python_Project/private_news/prank')

# 第二步:针对列表中每一个文件的文件称号,去除数字,对其重新命名

for rename_file in rename_list:

# 打印重命名前的文件的文件称号

print("原始文件称号:" + rename_file)

# 去除文件称号中的数字,对其重命名

os.rename(rename_file,rename_file.translate(None,'0123456789'))

# 打印重命名后的文件的文件称号

print("重命名后的文件称号:" + rename_file.translate(None,'0123456789'))

# 履行函数

rename_files()

在输出区能够看到输出成果,返回到之前的文件夹中,检查文件,发现现已被成功重命名。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180123A01G4M00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券