2015-02-23 89 views
0

我是Python的新手,我被困在这个上面。我需要检查是否可以在文件中找到一个字符串。 我已经创建了文件ContEAN.pyPython的结果问题

代码:

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" 

命令行:

$蟒蛇ContEAN.py 455

,其中 “455”,将是输入的价值东南

这是公司eanFZ.txt的ntent:

7777 
777 
0000000000156 
0000000015 
455 
9999 
85485 
656565 

问题是,我从来没有一个确定为最终的结果,我不知道为什么...

+4

修复您的缩进(我认为复制粘贴已经吃掉了一些东西,但它在python中非常重要),并学习如何调试。对于初学者,我会打印出所有相关的值,以便您可以查看您是否在比较自己的想法。我的赌注是你不知道,但不知道。 – luk32 2015-02-23 23:11:21

+0

[This](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)是如何调试小程序的一个很好的入门书。 – aruisdante 2015-02-23 23:12:20

+0

[Grep and Python]的可能的重复(http://stackoverflow.com/questions/1921894/grep-and-python) – aruisdante 2015-02-23 23:16:41

回答

1

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

其次,文件的行末尾有一个隐藏的换行符,所以它不等于来自argv的字符串。这可以使用rstrip()方法删除。

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

(您可能还需要检查的缩进。你需要去到一个新的缩进级别分别用于行之后和每个如果行,我假定这是由于复制和粘贴。)

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()) 

这会打印行号和给定字符串所在的行。

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] 

剥离文件中的换行符,使字符串匹配。