假设我有一个列表,其中包含“{N} word”形式的字符串(不带引号),其中N是某个整数,word是某个字符串。在某些文件夹D:\path\folder
中,我有大量名称格式为“{N}name.filetype
”的文件。通过输入上述列表(元素为“{N}”),我如何获得列表的输出,其中每个元素都具有以下形式:“{N} words D:\path\folder\{N}name.filetype
”?
例如......
InputList = [{75} Hello, {823} World, ...]
OutputList = [{75} Hello D:\path\folder\{75}Stuff.docx, {823} World D:\path\folder\{823}Things.docx, ...]
如果D:\path\folder
处的文件夹包含{75}Stuff.docx
和{823}Things.docx
等文件。
概括来说,我的问题基本上是:
如何让python读取文件夹并获取任何文件的绝对路径,该文件只包含列表中每个元素的某些部分(在这种情况下,我们在文件名中查找{N}并忽略该单词)并添加要生成输出列表的列表中每个对应元素的路径?
我理解这是一个很长的问题,结合了几个概念所以我非常感谢愿意提前帮助的人!
答案 0 :(得分:1)
重要的一步是将InputList
转换为{number: word}
的词典 - 这样可以更轻松地使用它。之后,只需循环浏览文件夹中的文件,从名称中提取数字并在字典中查找它们:
InputList = ['{75} Hello', '{823} World']
folder_path= r'D:\path\folder'
# define a function to extract the number between curly braces
def extract_number(text):
return text[1:text.find('}')]
from pathlib import Path
# convert the InputList to a dict for easy and efficient lookup
words= {extract_number(name):name for name in InputList}
OutputList= []
# iterate through the folder to find matching files
for path in Path(folder_path).iterdir():
# extract the file name from the path, e.g. "{75}Stuff.docx"
name= path.name
# extract the number from the file name and find the matching word
number= extract_number(name)
try:
word= words[number]
except KeyError: # if no matching word exists, skip this file
continue
# put the path and the word together and add them to the output list
path= '{} {}'.format(word, path)
OutputList.append(path)
print(OutputList)
# output: ['{75} Hello D:\\path\\folder\\{75}Stuff.docx', '{823} World D:\\path\\folder\\{823}Things.docx']