繁体   English   中英

解析脚本-乱码

[英]parsing script - Gibberish text

我有一个我需要解析的文本文件。 在此文本文件中,单词,数字,空格等没有特殊顺序。

该.txt文件中的某些点将带有字符串:

state0

看到此消息后,我需要将整行解析为一个单独的文件。

示例inputfile.txt

abc123def456
state0apples bananas0911

我的脚本应创建:outputfile.txt ,其中应包含:

state0apples bananas0911

到目前为止,我似乎无法正常运行的程序:

state0 = "state0"
state1 = "state1"
state2 = "state2"
state3 = "state3"
state4 = "state4"
with open('C:/inputfile.txt', 'r') as inF:
    for index, line in enumerate(inF):
        if 'state0' in line:
            with open('C:/outputfile.txt', 'w') as f:
                f.write("Line #%d has string: %s"  (index, line))
        else if 'state1' in line:
            with open('C:/output.txt', 'w') as f:
                f.write("Line #%d has string: %s"  (index, line))
        else if 'state2' in line:
            with open('C:/output.txt', 'w') as f:
                f.write("Line #%d has string: %s"  (index, line))
        else if 'state3' in line:
            with open('C:/output.txt', 'w') as f:
                f.write("Line #%d has string: %s"  (index, line))
        else if 'state4' in line:
            with open('C:/output.txt', 'w') as f:
                f.write("Line #%d has string: %s"  (index, line))

您没有告诉我们您的代码在做什么错,所以很难解释为什么它做错了什么……但是我可以看到四个直接的问题。 您必须先解决所有这些问题,并可能要修复我尚未看到的其他问题,然后代码才能真正起作用。


零,由于简单的SyntaxError ,您的代码甚至无法运行。 如果您查看Python打印的回溯,它将很清楚地告诉您:

    else if 'state1' in line:
          ^
SyntaxError: invalid syntax

为什么它不喜欢的if在以后else也是这样吗? 因为else必须紧跟冒号, if不是冒号, if必须紧跟其后。

您可能想要elif

    elif 'state1' in line:

我认为这是我们一直都在做的那种愚蠢的错字,但以防万一您实际上不了解elif ,请参阅教程


首先,在某些地方使用outputfile.txt ,在其他地方使用output.txt 大概您希望所有这些行都放在同一个文件中,但是其中一些行将转到一个完全不同的文件,并且您可能不在那里寻找它们。


其次,您每次使用'w'模式打开文件。 这会在位置0处截断文件,换句话说,它将删除以前存在的任何内容。 因此,在程序结束时,只有最后一个匹配项将在文件中,而不是所有匹配项。

如果要追加到现有文件,可以以'a'模式打开以进行追加,也可以以'r+'模式打开以进行读/写,然后搜索到文件的末尾。

但是我认为您真正想要的可能是在程序开始时创建一个新文件,擦除开始之前可能存在的所有内容,然后将所有行写入该文件。 为此,最简单的解决方案是仅在文件顶部一次打开一次文件。 像这样:

with open('C:/inputfile.txt', 'r') as inF, open('C:/outputfile.txt', 'w') as f:

第三:

f.write("Line #%d has string: %s"  (index, line))

您已经省略了%运算符。 这意味着您只是在尝试将字符串"Line #%d has string: %s"当作函数,将其indexline作为参数传递给它。 显然这是不合法的,这就是为什么您收到TypeError告诉您str不可调用的原因。


Python会为您提供这些错误是有原因的:因此您可以找出问题出在代码中的位置,并加以解决。 不要只运行您的代码,看到“它没有用”,然后举起双手。 如果您不愿意调试,则不要一开始就费心编写代码,因为没有人可以编写仅能正常工作的代码,也可以在不知道错误所在的情况下修复代码。

正则表达式确实有帮助:

import sys
import re

rgx = re.compile(r'state[0-4]')

with open(sys.argv[1], 'r') as in_file, open(sys.argv[2], 'w') as out_file:
    for n, line in enumerate(in_file):
        if rgx.search(line):
            out_file.write("Line #{} has string: {}".format(n, line))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM