【问题标题】:File iteration and variable searching文件迭代和变量搜索
【发布时间】:2017-01-04 03:04:12
【问题描述】:

我还是 python 中文件 I/O 的新手,所以我在弄清楚如何在文件中查找特定变量时遇到了一些麻烦。

这是我正在打开的文件(txt 类型):

grelha = [['O', 'H', 'L', 'E', 'M', 'R', 'R', 'V', 'U'],

          ['B', 'B', 'R', 'A', 'N', 'C', 'O', 'Z', 'A'],

          ['S', 'R', 'A', 'M', 'S', 'U', 'P', 'A', 'O'],

          ['A', 'A', 'B', 'A', 'P', 'O', 'T', 'Z', 'Z'],

          ['L', 'N', 'Z', 'R', 'O', 'E', 'R', 'N', 'U'],

          ['I', 'U', 'I', 'E', 'P', 'D', 'O', 'I', 'I'],

          ['L', 'O', 'L', 'L', 'O', 'R', 'A', 'C', 'A'],

          ['I', 'T', 'M', 'O', 'T', 'E', 'R', 'P', 'P'],

          ['L', 'I', 'E', 'A', 'Z', 'V', 'Y', 'U', 'U']]
palavras = ['branco','preto','azul','verde','rosa','amarelo','vermelho','cinza','lilas']

这是我得到的代码:

def file():
    game_file = open(str(input("What is the name of the file?")), "r+")
    for i in game_file:
        if i == 'grelha':#"I've tried without it being a string as well"
            print (i)    

据我所知,没有任何方法可以帮助我做到这一点,而且我也不太了解在这种情况下迭代是如何工作的。

如果有人能帮我解决这个问题并解释一下迭代,那就太好了!

【问题讨论】:

  • 你能显示你正在打开的文件的确切内容吗?您似乎希望该文件被解析为 python。
  • 你在文件中寻找那个变量是什么意思
  • 您需要序列化文件中的变量。将变量存储为常规文本不是可行的方法。我建议看看pickle 模块。
  • input 已经返回了一个字符串(或者应该被raw_input 替换,如果这是 Python 2 代码);无需将值包装在对 str 的调用中。
  • Dan Farrel- Done Chepner - 我第一次没有将(变量名)转换为字符串,但它似乎仍然无法正常工作

标签: python file search iteration


【解决方案1】:

您所做的似乎天真地假设仅仅因为文件内容是有效的python,用python打开它就会将其解析为python。绝对不是这样。您需要选择一种存储数据的格式,以便在需要重新读取数据时能够正确解释。

例如,您可能会发现 JSON 是存储此类结构化数据的完美方式:

{"grelha": [["O", "H", "L", "E", "M", "R", "R", "V", "U"], ["B", "B", "R", "A", "N", "C", "O", "Z", "A"], ["S", "R", "A", "M", "S", "U", "P", "A", "O"], ["A", "A", "B", "A", "P", "O", "T", "Z", "Z"], ["L", "N", "Z", "R", "O", "E", "R", "N", "U"], ["I", "U", "I", "E", "P", "D", "O", "I", "I"], ["L", "O", "L", "L", "O", "R", "A", "C", "A"], ["I", "T", "M", "O", "T", "E", "R", "P", "P"], ["L", "I", "E", "A", "Z", "V", "Y", "U", "U"]], "palavras": ["branco", "preto", "azul", "verde", "rosa", "amarelo", "vermelho", "cinza", "lilas"]}

然后你就可以用内置的 JSON 模块在你的程序中读入它了:

import json

with open('f.json') as f:
    data = json.loads( f.read() )
print data['grelha']

【讨论】:

  • 我试过了,但它似乎无法识别 json 模块,我也尝试了几种不同的方法来尝试到达那里,但它似乎没有用。
  • 我粘贴的代码按原样工作。随着您的数据变得更加复杂,您会发现像@scriptboy 的回答所暗示的那样构建自己的解析系统变得越来越困难。所以请记住 json 是一个强大、灵活的模型,用于描述应用程序代码外部的结构化数据。
【解决方案2】:

默认情况下,python 逐行读取文件,因此您的if i == 'grelha' 将一无所获。

如果要查找以 palavras 开头的行,可以使用startwith() 方法:

In [3]: for line in file:
   ...:     if line.startswith('palavras'):
   ...:         print line
   ...:         
palavras = ['branco','preto','azul','verde','rosa','amarelo','vermelho','cinza','lilas']

对于文件,逐行迭代; 对于 str,迭代逐个字符地工作;

一般python把文件当成字符串,所以不能在文件中写python代码,palavras = ['branco','preto','azul','verde','rosa','amarelo','vermelho','cinza','lilas']这行是字符串,不是代码。你仍然需要解析它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多