python中的文件名技巧

2024-07-02 04:58:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件夹,里面有各种格式的书(.pdf、.djvu、.dvi)。它们都遵循以下格式:

[书名]-[Author].[标识是否可搜索].[文件类型]

我想把我的书列成一个格式(x,y,z,t),其中x是书名,y是作者,等等。我的问题是当我这样做时:

for file in os.listdir('/home/username/Books'):

文件是一个字符串,因此是不可变的,所以我不能更改它。在


Tags: in文件夹forpdfos格式作者标识
3条回答

字符串是不可变的,但这并不意味着不能从字符串中创建所需的元组。在

这样的方法应该有效:

def file_to_tuple(file):
    title_author, searchable, ext = file.rsplit('.', 2)
    title, author = title_author.rsplit(' - ', 1)
    return (title, author, searchable, ext)

然后,您可以使用多种方法将文件列表转换为元组列表,以下是几个选项:

^{pr2}$

使用带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(出于相同的原因)。在

相关问题 更多 >