Python导致的问题

时间:2015-02-23 23:06:41

标签: python if-statement file-io

我是Python的新手,我坚持这一点。我需要检查一下我是否可以在文件中找到一个字符串。 我创建了ContEAN.py文件

代码:

import sys

for arg in sys.argv:
inputEAN=arg
EAN = open("/home/master/Documenti/Progetti/eanFZ.txt","r")

riga=EAN.readlines()

EAN.close()

print inputEAN

for i in range(len(riga)):
if inputEAN == riga[i]:
    print "OK"

从命令行:

  

$ python ContEAN.py 455

其中“455”将是inputEAN的值

这是eanFZ.txt的内容:

7777
777
0000000000156
0000000015
455
9999
85485
656565

问题是我从来没有得到最终结果,我不知道为什么......

3 个答案:

答案 0 :(得分:1)

首先,readlines()方法返回一个可迭代的对象,可以在循环中迭代。每次迭代都将使用文件的下一行。

其次,文件的行末尾有一个隐藏的换行符,因此它与argv中的字符串“不相等”。这可以使用rstrip()方法删除。

for i in riga:
    if inputEAN == i.rstrip():
        print "OK"

(您可能还需要检查缩进。您需要在每行之后转到新的缩进级别,并且每行都是行。我假设这是由于复制和粘贴。)

答案 1 :(得分:0)

您可以按如下方式更改脚本:

import sys

if len(sys.argv) == 1:
    exit;

inputEAN=sys.argv[1]

with open("file.txt","r") as f:
    for i, a_line in enumerate(f, 1):
        if inputEAN in a_line:
            print(i, a_line.strip())

这会打印行号和找到给定字符串的行。

答案 2 :(得分:0)

你可以这样做

import sys

if len(sys.argv) < 2:
    print "must provide args"
    sys.exit()

with open("eanFZ.txt","r") as f:
    lines=[line.strip() for line in f]
    args = sys.argv[1:]

    for line in lines:
        if line in args:
            print "OK"

请注意重要事项

args = sys.argv[1:]

不要在比较循环中使用sys.argv [0]。它是剧本的名称。

lines=[line.strip() for line in f]

从文件中删除换行符,使字符串匹配。