【问题标题】:How to make a dictionary from a file如何从文件中制作字典
【发布时间】:2017-04-24 14:12:03
【问题描述】:

我的文件位于包含带有图像的文本文档的文件夹中。文件“stars”包含A.txt

我的目标是得到一个字典,它会说 {'A', A.txt } A.txt 是实际文件 A.txt 的路径

import os




def main():

    # relative path to the folder where you unzipped the ASCII art files
    #folder = "stars"
    # or use an absolute path to the folder. example:
    folder = r"C:\Users\Alison\Documents\a CPS 111\Bonus PA\stars\stars"

    # os.listdir(folder) returns a list of files in folder
    file_list = os.listdir(folder)
    letter_art = {}



    for fname in file_list:
        # example: letter[0] is "A" and letter[1] is "txt"
        letter_extension_list = fname.split(".")
        key = letter_extension_list[0]

        value = letter_extension_list[1]
        value = "%s."%(key) + value 

        letter_art[key] = value 
        fname = "\\".join([folder, value])
    word = str(input("Please input a letter: "))  
    word = word.upper()
    for letter in word:
        print(letter_art[letter])



        print(fname)


main()

我真的很难使目录正常工作,因为我最终会达到用户输入单词并根据星号文件中的字母输出图形的地步。

因此文件夹中的文件包含与字母关联的文本文档。有 26 个文档 A-Z A.txt、B.txt 等...

目标是创建一个字典,上面写着 {'A', A.txt} 因此,如果用户输入“hi”,计算机会找到 h.txt 和 i.txt 并在文本文件中显示信息。

【问题讨论】:

  • 我不明白你想做什么,我不知道你对这些循环的目标是什么。
  • 我正在尝试从文件中制作字典。但正如你可能会说的那样,我非常卡住。我想我对如何将某物分配为键和某物作为值感到困惑。循环只是为了读取文件,因为有多行@TigerhawkT3
  • 我仍然不知道你的实际任务是什么,但没有一行代码对我来说是合乎逻辑的。如果您要打印您想要获取的字典,也许您可​​以通过提供理论结果来阐明您的任务?

标签: python file dictionary io


【解决方案1】:

编辑后

import os
folder = r"C:\Users\sarah\Documents\a CPS 111\Bonus PA\stars\stars"

file_list = os.listdir(folder)
print(file_list)
letter_art = {}

file_list.sort()

for fname in file_list:
    letter_extension_list = fname.split(".")
    key = letter_extension_list[0]
    letter_art[key]=folder+'\'+fname

print(letter_art)

word=raw_input('Input : ')
letters=list(word)

for letter in letters:
    if letter in letter_art:
        print("**File : %s***\n"%letter)
        with open(letter_art[letter]) as f:
            print f.read()

【讨论】:

  • 它正在被添加到字典中,因为字典没有排序,所以顺序无关紧要。
  • @sarahcampolt 它对字母列表进行排序,但这对您没有帮助,因为字典不会保持其顺序。然后,您想为此将字典更改为 OrderedDict。
  • @sarahcampolt 现在检查.. 这能解决您的疑虑吗?
【解决方案2】:

如果您目前的目标是获取一个字典,其中键是字母,值是文件路径,您可以试试这个:

import os
folder = r"C:\Users\sarah\Documents\a CPS 111\Bonus PA\stars\stars"

file_list = os.listdir(folder)
letter_art = {}

for fname in file_list:
    letter_extension_list = fname.split(".")
    key = letter_extension_list[0]
    fp = folder + '\\' + fname
    letter_art[key] = fp

entry = raw_input()
for letter in entry:
    print letter_art[letter]

【讨论】:

  • 这成功了!你能向我解释一下 fp = folder + '\\' + fname 是做什么的吗?
  • 另外,当我运行代码时,它会为我提供所有字母的位置文件,我将如何对其进行操作,以便代码只给我特定的字母? @Yash Dhandhania
  • fp 将文件夹名称和文件名结合起来,为您提供文件路径,然后将其分配为给定键的值。
  • 您要查找哪些具体的字母?除非字母有模式,否则您很可能必须对其进行硬编码
  • 那将是一个问题,因为用户可以输入任何内容。好吧,这将是这段代码的最终目标
【解决方案3】:

看起来你覆盖了key。首先是文件名,例如“A”,但如果名称为“AB”,则密钥会导致问题(例如访问密钥 [1]),但也许您不会遇到这种情况。

另外,letter_art[key] 在“#to get all A-Z as the keys”循环中似乎没有做任何事情。这是旧代码吗?

稍后值也被覆盖而不做任何事情,你只是想得到最后一行吗?

您只是想实现@Yash Dhandhania 的回答吗?

【讨论】:

  • 我在#to get all A-Z as the keys 下的代码是我尝试遍历所有索引以获取 A、B、C,但这似乎是错误的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多