2014-11-23 36 views
-1

這是我第一次嘗試在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'} 
+1

你試過什麼? – Hackaholic 2014-11-23 23:39:16

+0

你可以證明文件是怎麼樣的嗎??像兒童名字item1 item2 ... – Hackaholic 2014-11-23 23:40:55

+0

那麼只有一個'John'可以寫信給聖誕老人?這對許多John's來說並不好...... **: - D **更嚴肅地說,你應該給出一個更具體的例子,說明你到目前爲止所做的事情,你得到的錯誤,你打算如何處理這個...... – BorrajaX 2014-11-23 23:41:16

回答

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。

0

假設當前目錄下的子目錄lettersc:/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')]) 

注意,在你的問題建議這兩個函數返回一個列表,而不是一本字典。

0

好說明說,最終的結果應該包含這些冒號{}

每一個文本文件,每一行都

像這幾個項目之一:

john.txt

筆記本 玩具車 t恤

+0

This不是答案。請在您的原始問題中添加說明。 – mhawke 2014-11-24 11:42:51