这是我第一次尝试将一个在python中使用目录的程序放在一起。
在我当前目录的子目录中有一个名为letters/
的目录,它包含儿童给圣诞老人的信件。
程序的编写方式应该是c:/python/exercise5/solved.py
之类的某个目录。这些字母位于子目录c:/python/exercise5/letters
中,它包含:c:/python/exercise5/letters/john.txt
这些文件只包含每个孩子所希望的事物清单。因此,文件john.txt
的内容例如是:
notebook, toy car, t-shirt
我要做的是创建一个接收子名称的函数,并返回孩子想要的项目列表。为此,该函数必须从子目录"字母"中读取正确的文件。
所以看起来有点像这样
read_file("john") {'notebook', 'toy car', 't-shirt'}
接下来我想要创建一个不接收任何参数的函数,但它返回包含所有孩子名字的{ }
,这些名字写给圣诞老人一封信。
喜欢这个
names = senders() >>> names {'dana', 'emma', 'kerry', 'john', 'tom'}
答案 0 :(得分:0)
我建议你看看os module。它提供列出目录,删除目录等的功能,例如
os.listdir("c:\\python27\\Lib\\site-packages")
将返回文件夹site-packages
中的文件和文件夹列表。
我不知道一个字母文件应该是什么样子,但我认为它是一个纯文本文件,包含用空格分隔的单词,如下所示:
notebook toy-car tshirt
然后你就可以阅读文件的内容,然后file_contents.split()
,它会返回一个包含单词的列表[' notebook',' toy-car' ,' tshirt'],有关详细信息,请查看string module。
HTH。
答案 1 :(得分:0)
假设当前目录letters
的子目录c:/python/exercise5
,您只需使用相对路径为特定子项打开文件:
import os.path
BASE_DIR = '' # set this if you want a fixed base directory
LETTERS_DIR = os.path.join(BASE_DIR, 'letters')
def read_file(child_name):
'''Returns a list of items requested by the given child'''
filename = '{}.txt'.format(os.path.join(LETTERS_DIR, child_name))
with open(filename) as f:
return set([s.strip() for s in next(f).split(',')]) # only reads the first line
发件人列表只需从letters
目录中获取文件名并删除.txt
扩展名:
import os
def senders():
return set([filename[:-4] for filename in os.listdir(LETTERS_DIR) if filename.endswith('.txt')])
请注意,这两个函数都会返回一个列表,而不是问题中建议的字典。
答案 2 :(得分:0)
说明说最终结果应该包含这些冒号{}
每个文本文件在每行中包含少量项目
像这样:
john.txt
笔记本 玩具车 T恤