【问题标题】:Python's resultant issuesPython 的结果问题
【发布时间】:2015-04-25 10:59:00
【问题描述】:

我是 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

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

【问题讨论】:

  • 修复你的缩进(我认为复制粘贴已经吃掉了一些东西,但它在python中非常重要)并学习如何调试。对于初学者,我会打印出所有相关的值,这样你就可以看到你是否在比较你认为自己是什么。我敢打赌你不知道,但不确定。
  • This 是一本很好的关于如何调试小程序的入门书。
  • Grep and Python的可能重复
  • 能否请您使用您遇到的错误?还是它给你一个错误?
  • 记得在比较之前跳过sys.argv[0] 并从文件的行中删除换行符。

标签: python if-statement file-io


【解决方案1】:

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

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

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

(您可能还想检查缩进。您需要在每个 for 行和每个 if 行之后进入一个新的缩进级别。我假设这是由于复制和粘贴造成的。)

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      你可以这样做

      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]
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-26
        • 2020-10-03
        • 1970-01-01
        • 1970-01-01
        • 2011-11-18
        相关资源
        最近更新 更多