从输入中获取字符串,并挑选出该文本的一部分以从字典中打印其定义
Take string from an input, and pick out part of that text to print its definition from a dictionary
我对 python 比较陌生,我编写了一些非常简单的代码,并且正在努力实现一个提示用户输入文件名的程序(例如: cat.png) 然后输出该文件的媒体类型(例如:.png)。如果文件名以以下任何后缀结尾(不区分大小写):
-.gif
-.jpg
-.jpeg
-.png
-.pdf
-.txt
-.zip
那我要打印出它对应的意思:
-image/gif
-image/jpeg
-image/jpeg
-image/png
-application/text
-text/plain
-application/zip
例如:
My desired output:
$ python extensions.py
File name: cat.gif
image/gif
$ python extensions.py
File name: cat.jpg
image/jpg
我尝试使用字典来解决这个问题,将名称与其相应的格式相匹配:
file_name = input('File name: ').strip().lower()
extensions = [
{'name': '.gif', 'format': 'image/gif' },
{'name': '.jpg', 'format': 'image/jpeg' },
{'name': '.jpeg', 'format' :'image/jpeg' },
{'name': '.png', 'format': 'image/png' },
{'name': '.pdf', 'format': 'application/text' },
{'name': '.txt', 'format': 'text/plain' },
{'name': '.zip', 'format': 'application/zip' }
]
问题是,我不知道如何将像 cat.png
这样的用户输出转换成像 .png
这样的文件,并像上图那样在终端上打印为 image/png
。我试图找到一种方法,以某种方式将 .png
部分从 'cat.png' 中取出,并通过字典传递它,打印出 image/png
.
感谢您阅读这篇冗长的说明。有人可能有实施这样一个程序的想法吗?
如果文件名真的只是文件名加一个点,那么你可以使用.split()
获取扩展名:
file_extension = file_name.split('.')[-1]
作为解释:split.('.')
将您输入的字符串拆分为点作为分隔符,returns 为列表,[-1] 索引为您提供最后一个该列表中的项目,即扩展名。
然后您可以在字典中查找该扩展名。
这应该不是什么大问题。
- 首先,创建一个包含 {extension:explanation} 项的字典。
- 然后,要求用户输入文件名。
- 然后,将文件名以点分割,取点后的部分。您可以为此使用
partition
方法。
- 最后,查询你的字典并return输出。
代码:
# First, create a dictionary of {extension:explanation} items.
extensions_dict {
'png': 'image/media'
# put as much as you wish
}
# Then, ask the user to enter the filename.
user_file = input('file name: ')
# Then, split the file name by dot, take the part after dot.
file_name, dot, file_extension = user_file.partition('.')
# Finally, query your dictionary and return the output.
# You can print a message to the user as a default
# if the extension is not in your dictionary
print(extensions_dict.get(
file_extension,
f'I cannot understand your extension ({file_extension}) :('
)
import os
file_name = 'cat.png'
extensions = {
'.gif': 'image/gif',
'.jpg': 'image/jpeg' ,
'.jpeg': 'image/jpeg' ,
'.png': 'image/png' ,
'.pdf': 'application/text' ,
'.txt': 'text/plain' ,
'.zip': 'application/zip'
}
print(extensions[os.path.splitext(file_name)[1]])
所以首先,我已经更改了 extensions
的结构 - 没有必要如此重复并保留一个很难浏览的字典列表。使用扩展作为键,您可以直接引用它们以找到相应的格式。
然后您可以使用 Python os.path
模块中的 splitext
方法来获取表示文件扩展名的字符串(比 str.split
对于各种边缘情况更有效)
其他解决方案都可以。但我想为您提供一种更 pythonic 的方式,使用 Pythons pathlib
包以独立于平台的方式和一些其他调整来处理文件路径对象。
#!/usr/bin/env python3
import pathlib # recommended way with Python3
media_types_dict = {
'png': 'image/media',
'gif': 'image/gif',
# ...
}
# ask the user
user_file = input('file name: ')
# convert to a file path object
user_file = pathlib.Path(user_file)
# get the extension (with the trailing dot, e.g. ".png")
extension = user_file.suffix
# remove the dot
extension = extension[1:]
try:
# get the media type
media_type = media_types_dict[extension.lower()]
except KeyError: # if the extensions is not present in the dict
raise Exception(f'The extension "{extension}" is unknown.')
# output the result
print(media_type)
我对 python 比较陌生,我编写了一些非常简单的代码,并且正在努力实现一个提示用户输入文件名的程序(例如: cat.png) 然后输出该文件的媒体类型(例如:.png)。如果文件名以以下任何后缀结尾(不区分大小写):
-.gif
-.jpg
-.jpeg
-.png
-.pdf
-.txt
-.zip
那我要打印出它对应的意思:
-image/gif
-image/jpeg
-image/jpeg
-image/png
-application/text
-text/plain
-application/zip
例如:
My desired output:
$ python extensions.py
File name: cat.gif
image/gif
$ python extensions.py
File name: cat.jpg
image/jpg
我尝试使用字典来解决这个问题,将名称与其相应的格式相匹配:
file_name = input('File name: ').strip().lower()
extensions = [
{'name': '.gif', 'format': 'image/gif' },
{'name': '.jpg', 'format': 'image/jpeg' },
{'name': '.jpeg', 'format' :'image/jpeg' },
{'name': '.png', 'format': 'image/png' },
{'name': '.pdf', 'format': 'application/text' },
{'name': '.txt', 'format': 'text/plain' },
{'name': '.zip', 'format': 'application/zip' }
]
问题是,我不知道如何将像 cat.png
这样的用户输出转换成像 .png
这样的文件,并像上图那样在终端上打印为 image/png
。我试图找到一种方法,以某种方式将 .png
部分从 'cat.png' 中取出,并通过字典传递它,打印出 image/png
.
感谢您阅读这篇冗长的说明。有人可能有实施这样一个程序的想法吗?
如果文件名真的只是文件名加一个点,那么你可以使用.split()
获取扩展名:
file_extension = file_name.split('.')[-1]
作为解释:split.('.')
将您输入的字符串拆分为点作为分隔符,returns 为列表,[-1] 索引为您提供最后一个该列表中的项目,即扩展名。
然后您可以在字典中查找该扩展名。
这应该不是什么大问题。
- 首先,创建一个包含 {extension:explanation} 项的字典。
- 然后,要求用户输入文件名。
- 然后,将文件名以点分割,取点后的部分。您可以为此使用
partition
方法。 - 最后,查询你的字典并return输出。
代码:
# First, create a dictionary of {extension:explanation} items.
extensions_dict {
'png': 'image/media'
# put as much as you wish
}
# Then, ask the user to enter the filename.
user_file = input('file name: ')
# Then, split the file name by dot, take the part after dot.
file_name, dot, file_extension = user_file.partition('.')
# Finally, query your dictionary and return the output.
# You can print a message to the user as a default
# if the extension is not in your dictionary
print(extensions_dict.get(
file_extension,
f'I cannot understand your extension ({file_extension}) :('
)
import os
file_name = 'cat.png'
extensions = {
'.gif': 'image/gif',
'.jpg': 'image/jpeg' ,
'.jpeg': 'image/jpeg' ,
'.png': 'image/png' ,
'.pdf': 'application/text' ,
'.txt': 'text/plain' ,
'.zip': 'application/zip'
}
print(extensions[os.path.splitext(file_name)[1]])
所以首先,我已经更改了 extensions
的结构 - 没有必要如此重复并保留一个很难浏览的字典列表。使用扩展作为键,您可以直接引用它们以找到相应的格式。
然后您可以使用 Python os.path
模块中的 splitext
方法来获取表示文件扩展名的字符串(比 str.split
对于各种边缘情况更有效)
其他解决方案都可以。但我想为您提供一种更 pythonic 的方式,使用 Pythons pathlib
包以独立于平台的方式和一些其他调整来处理文件路径对象。
#!/usr/bin/env python3
import pathlib # recommended way with Python3
media_types_dict = {
'png': 'image/media',
'gif': 'image/gif',
# ...
}
# ask the user
user_file = input('file name: ')
# convert to a file path object
user_file = pathlib.Path(user_file)
# get the extension (with the trailing dot, e.g. ".png")
extension = user_file.suffix
# remove the dot
extension = extension[1:]
try:
# get the media type
media_type = media_types_dict[extension.lower()]
except KeyError: # if the extensions is not present in the dict
raise Exception(f'The extension "{extension}" is unknown.')
# output the result
print(media_type)