2015-02-23 46 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] 

剝離文件中的換行符,使字符串匹配。