2024-07-02 04:58:55 发布
网友
我有一个文件夹,里面有各种格式的书(.pdf、.djvu、.dvi)。它们都遵循以下格式:
[书名]-[Author].[标识是否可搜索].[文件类型]
我想把我的书列成一个格式(x,y,z,t),其中x是书名,y是作者,等等。我的问题是当我这样做时:
for file in os.listdir('/home/username/Books'):
文件是一个字符串,因此是不可变的,所以我不能更改它。在
字符串是不可变的,但这并不意味着不能从字符串中创建所需的元组。在
这样的方法应该有效:
def file_to_tuple(file): title_author, searchable, ext = file.rsplit('.', 2) title, author = title_author.rsplit(' - ', 1) return (title, author, searchable, ext)
然后,您可以使用多种方法将文件列表转换为元组列表,以下是几个选项:
使用带maxsplit参数的^{},这样对于包含句点或破折号的标题或包含句点的作者,它不会失败,例如:
maxsplit
>>> file_to_tuple('Narnia - The Silver Chair - C.S. Lewis.1.pdf') ('Narnia - The Silver Chair', 'C.S. Lewis', '1', 'pdf')
使用^{}将其分解为所需的部分。在
您不想更改字符串,因此它是不可变的这一事实是无关的。你仍然可以用它制作新的物品。在
下面是一个小函数(tested,even;),它可以满足您的需要:
def book_tuple(info): book_author, searchable, ext = info.rsplit('.', 2) book, author = book_author.rsplit(' - ', 1) return book, author, searchable, ext book_list = [] for filename in os.listdir('/home/username/Books'): book_list.append(book_tuple(filename))
第一个拆分将.rsplit()与2一起使用,因此最多拆分两次(如果标题或作者名中有句点),并从结尾开始(同样,如果标题或作者名中有句点)。第二个拆分也会执行相同的操作,最大拆分为1(出于相同的原因)。在
.rsplit()
2
字符串是不可变的,但这并不意味着不能从字符串中创建所需的元组。在
这样的方法应该有效:
然后,您可以使用多种方法将文件列表转换为元组列表,以下是几个选项:
^{pr2}$使用带} ,这样对于包含句点或破折号的标题或包含句点的作者,它不会失败,例如:
maxsplit
参数的^{使用^{} 将其分解为所需的部分。在
您不想更改字符串,因此它是不可变的这一事实是无关的。你仍然可以用它制作新的物品。在
下面是一个小函数(tested,even;),它可以满足您的需要:
第一个拆分将
.rsplit()
与2
一起使用,因此最多拆分两次(如果标题或作者名中有句点),并从结尾开始(同样,如果标题或作者名中有句点)。第二个拆分也会执行相同的操作,最大拆分为1(出于相同的原因)。在相关问题 更多 >
编程相关推荐