【问题标题】:Reading Tags in text File Python在文本文件 Python 中读取标签
【发布时间】:2015-08-06 14:22:14
【问题描述】:

所以基本上我有一个类似这样的文本文件设置。

[IP] 192.168.22.12
[NAME] gtty
[COMMAND] i2203320

我想用标签读取文件中的所有内容,因此 [IP] 然后上面有一个 IP,我将检查它,因为这些将是我正在使用我现在使用的代码的系统的一些设置这个。

while line != '':

if (line == '[IP]'):
    List [0] == line[5:]

它真的不是最好的,我希望它能够更好地工作。我必须为我添加的每个新行设置 if 语句,我只是希望它更简单,比如可能有一个列表或具有命名值的东西并拥有它,所以当我读取文件时它已经在寻找值并分配他们去吧。

nameList = ['[IP]': line.read()]

就像这样,我理解那个语法可能是错误的,但我只是想举一个例子,所以每个人都知道我想说什么。

关于 BSD_,

【问题讨论】:

  • 你可以用字典来做到这一点。只需拆分行,并使用 [IP] 作为字典键。您不需要检查密钥是否存在。如果它不存在,它将被创建,因此您可以创建新设置而无需调整代码。
  • 你能举个例子来说明如何做到这一点吗?
  • 我已经发布了一个应该有效的答案
  • @Stiffo 好东西人 :) 谢谢你的帮助 :)
  • 这是一个配置文件吗?如果是这样,请查看 ConfigParser link

标签: python list sorting text-files


【解决方案1】:

用正则表达式做,很容易解析:

import re

pat = re.compile(r'\[(.*?)\](.*)')

settings = {}

with open('your_file') as fd:
    for line in fd:
        m = pat.match(line)
        if m is None: continue
        settings[m.group(1)] = m.group(2).strip()

现在一切都应该在settings 中。

通过以下方式获取 IP 信息:

ip = settings['IP']

反向操作:

with open('your_file', 'w') as fd:
    for k, v in settings.items():
        fd.write('[{}] {}\n'.format(k, v))

【讨论】:

  • hm.. 似乎出错了.. “Expected::”,这可能是因为我的 python 版本吗?
  • @BSD_ 哦,那是因为我在旅途中输入冒号时不小心切换到了另一种输入法。如果您复制并粘贴我的代码,那是错误的。现在好了。
  • 非常感谢 :)
  • 嘿,嗯,你怎么能反转这个并写入一个文本文件而不是从它读取,而是像我显示的那样写它??
  • 这更容易。看来您对python很陌生。很值得认真学习,而不是一块一块地捡起来。后一种方式你不会学到更多。我之前尝试过用后一种方式学习东西,但最后我发现通过系统地阅读书籍和文档,我可以在更短的时间内学习得更快、更成熟。
【解决方案2】:

在对象中的数组上添加键。

obj = {};
with open("text.txt", "r") as f:
    for line in f:
        key = line.split()[0]
        try:
            obj[key]
        except:
            obj[key] = []
        obj[key].append(line.split()[1])
for key in obj:
    print key, obj[key]

【讨论】:

  • 这不正是他要求不要得到的吗?他正在阅读的每个标签/设置的 if-case。
【解决方案3】:

这将生成文件中所有设置的字典。这假定文件的语法与所描述的样式一致。

输入:

[IP] 192.168.22.12
[NAME] gtty
[COMMAND] i2203320

settings = {}
with open("text.txt", "r") as f:
    for line in f:
        items = line.split()
        settings[items[0]] = ' '.join(items[1:])

输出:

{"[IP]":"192.168.22.12", "[NAME]":"gtty, "[COMMAND]":"i2203320"}

然后,您可以在需要时通过调用settings["[IP]"] 获取 IP 或任何设置。当然,您可以非常轻松地对其进行编辑,以仅添加实际以 [ ] 项目开头的行,其中只有一个额外的 if-case。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 2014-06-23
    • 1970-01-01
    • 2019-04-04
    • 2018-07-15
    • 2015-12-15
    • 2021-12-22
    • 1970-01-01
    相关资源
    最近更新 更多