gpt4 book ai didi

python - Python 中的解析行 : Use RE or Not?

转载 作者:太空狗 更新时间:2023-10-29 17:48:43 25 4
gpt4 key购买 nike

我是一名 Perl 程序员,正在尝试通过学习我以前完成的一些工作并将其转换为 Python 来学习 Python。这不是逐行翻译。我想学习 Python 技术来完成此类任务。

我正在解析 Windows INI 文件。部分名称采用以下格式:

[<type> <description>]

<type>是单个单词字段,不区分大小写。 <description>可以是多个单词。

一段之后,有一堆参数和值。它们的形式是:

 <parameter> = <value>

参数没有空格,只能包含下划线、字母和数字(不区分大小写)。因此,第一个 =是参数和值之间的分频器。等号周围可能有空格分隔参数和值。行首或行尾可能有额外的空格。

在 Perl 中,我使用正则表达式进行解析:

while (my $line = <CONTROL_FILE>) {
chomp($line);
next if ($line =~ /^\s*[#;']/); #Comments start with "#", ";", or "'"
next if ($line =~ /^\s*$/); #Ignore blank lines

if ($line =~ /^\s*\[\s*(\w+)\s+(.*)/) { #Section
say "This is a '$1' section called '$2'";
}
elsif ($line =~ /^\s*(\w+)\s*=\s*(.*)/) { #Parameter
say "Parameter is '$1' with a value of '$2'";
}
else { #Not Comment, Section, or Parameter
say "Invalid line";
}

}

问题是我已经被 Perl 破坏了,所以我认为最简单的方法是使用正则表达式。这是我到目前为止的代码...

 for line in file_handle:
line = line.strip

# Comment lines and blank lines
if line.find("#") == 1 \
or line.find(";") == 1 \
or line.whitespace:
continue

# Found a Section Heading
if line.find("[") == 1:
print "I want to use a regular expression here"
print "to split the section up into two pieces"
elif line.find("=") != -1:
print "I want to use a regular expression here"
print "to split the parameter into key and value"
else
print "Invalid Line"

这里有几件事让我恼火:

  • 有两个地方似乎需要使用正则表达式。进行这种拆分的 Python 方法是什么?
  • 我确保去掉字符串两边的空白,然后重写字符串。这样,我就不必多次进行剥离。但是,我正在重写我理解的字符串,这在 Python 中是一种非常低效的操作。处理此问题的 Python 方法是什么?
  • 最后,我的算法看起来很像我的 Perl 算法,这似乎表明我让我的 Perl 思想妨碍了。我的代码应该如何用 Python 构建?

我一直在浏览各种在线教程,它们帮助我理解了语法,但在处理语言本身方面帮助不大——尤其是那些倾向于用另一种语言思考的人。

我的问题:

  • 我应该使用正则表达式吗?或者,还有其他更好的方法来处理这个问题吗?
  • 我的编码逻辑是否正确?我应该如何考虑解析此文件?

最佳答案

虽然我认为这不是您的意图,但文件格式看起来与 Python 的内置 ConfigParser 非常相似。模块。有时已经为您提供了最“Pythonic”的方式。 (:

更直接地回答您的问题:正则表达式可能是执行此操作的好方法。否则,您可以尝试更基本的(和不太健壮的)

(parameter, value) = line.split('=')

如果该行不包含或包含多个“=”字符,这将引发错误。您可能想先使用 '=' in line 对其进行测试。

还有:

line.find("[") == 1

可能更好地替换为

line.startswith("[")

希望对您有所帮助(:

关于python - Python 中的解析行 : Use RE or Not?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9201723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com