从Python2.7到Perl5,转换

2024-09-29 00:12:23 发布

您现在位置:Python中文网/ 问答频道 /正文

Perl5与Python2.7有什么不同?你知道吗

我一直在试用Perl5,但它看起来很难,因为我之前在尝试打开/读取/关闭文件时就遇到了问题。你知道吗

我有regex Python代码:

#!/usr/bin/python

import re

SyslogText = open('syslog.txt', 'r')
OutputText = open('results.txt', 'w')
KeywordText = open('keyword.txt', 'r')

listOfKeywords = []

for keyword in KeywordText:
    listOfKeywords.append(keyword)

for string in SyslogText:
    for keyword in listOfKeywords:
        if keyword in string:

            hostName = re.search(r'\s[A-Z]+\s', string, re.I)

            dateAndTime = re.search(r'[A-Z][A-Z][A-Z]\s[0-9]+\s[0-9]{2}\:[0-9]{2}\:[0-9]{2}', string, re.I)

            moreResults = re.search(r'\:\s[^^]+\S', string, re.I|re.M)

            portInfo = re.search(r'[A-z]+[[]\d+[]]', string)

            if portInfo:

                   print '**' + keyword + '**' + ' ' + hostName.group(0) + dateAndTime.group(0) + moreResults.group(0) + ' ' + portInfo.group(0) + '\n'

                   OutputText.write('**' + keyword + '**' + ' ' + hostName.group(0) + dateAndTime.group(0) + moreResults.group(0) + ' ' + portInfo.group(0) + '\n')

            else:

                print ('**' + keyword + '**' + ' ' + hostName.group(0) + dateAndTime.group(0) + moreResults.group(0) + ' ' + keyword + '\n')

                OutputText.write('**' + keyword + '**' + ' ' + hostName.group(0) + dateAndTime.group(0) + moreResults.group(0) + ' ' + keyword + '\n')

使用这个例子,当转换为Perl时,如何用Perl编写它,特别是for循环?你知道吗

我已经从网站http://perldoc.perl.org/学习了Perl,但是对于如何编写for循环,我并不是很清楚。你知道吗

我已经开始把它转换成Perl(它的一部分)

#!usr/bin/perl

use strict;
use warnings;

my $syslogFile = 'syslog';

open (my $info, '<', $syslogFile) or die "Could not open $syslogFile";

while (my $line = <$info>)
{
    chomp $line;
    print "$line\n";
}

我被困在for循环部分,因为我不太确定如何用Perl编写它。另外,在打开和读取文本文件时调用close是一个要求吗?如果是,你什么时候用?我确实在佩尔多克读到过,但我不明白。你知道吗


Tags: inretxtforsearchstringgroupopen
1条回答
网友
1楼 · 发布于 2024-09-29 00:12:23

Perl相当于Python循环的形式:

for X in Y:

其中Y是一个数组,应该是:

for my $X (@Y) {
    …
}

Y是文件的情况下,问题中的while循环是正确的。你知道吗


至于你的另一个问题:在Perl中关闭文件并不是严格要求的,就像在Python中一样。(文件将一直保持打开状态,直到文件句柄超出范围—在本例中,当进程退出时会发生这种情况。)

相关问题 更多 >