【问题标题】:Facing issue with for loop面临for循环的问题
【发布时间】:2016-08-01 02:59:01
【问题描述】:

我试图让这个函数读取输入文件并将输入文件中的行输出到新文件中。 Pycharm 一直说 'item' 没有被使用,或者它在第一个 for 循环中被使用。我不明白为什么“项目”是个问题。它也不会创建新文件。

input_list = 'persist_output_input_file_test.txt'

def persist_output(input_list):
    input_file = open(input_list, 'rb')
    lines = input_file.readlines()
    input_file.close()
    for item in input_list:
        write_new_file = open('output_word.txt', 'wb')
        for item in lines:
            print>>input_list, item
        write_new_file.close()

【问题讨论】:

  • 您认为您在for item in input_list: 正文中到底在哪里使用了item?您已经使用行中的另一个值隐藏了该名称:for item in lines:,并且在该行之前从未使用过 item
  • 不要使用 >> 运算符。这是 Python 中的位移运算符,而不是 C++ 中的提取运算符。它会尝试将print 右移你在右边说的多少字节 - 这是荒谬的,程序会正确地抛出错误。
  • 你用的是什么版本的 Python?
  • PyCharm 还告诉你,使用 C++ 中的流运算符 >> 可以吗?而且即使在 c++ 中也是cout <<

标签: python-2.7 pycharm


【解决方案1】:

您的程序中出现了一些问题。

  1. input_list 似乎是一个表示文件名的字符串。目前,您正在使用for item in input_list 遍历字符串中的字符。

  2. 在第二个 for 循环中隐藏已创建的变量 item。我建议你改变它。

  3. 在 Python 中,根据您使用的版本,将语句打印到屏幕的正确语法是 print text(Python 2) 或 print(text)(Python 3)。不像 c++ 的std::cout << text << endl;<<>> 实际上是 Python 中的位操作符,它们将位向左或向右移动。

【讨论】:

    【解决方案2】:

    您的实施中存在一些问题。请参阅以下代码了解您打算做什么:

    def persist_output(input_list):
        input_file = open(input_list, 'rb')
        lines = input_file.readlines()
        write_new_file = open('output_word.txt', 'wb')
        input_file.close()
        for item in lines:
            print item
            write_new_file.write(item);
    

    您之前实现的问题如下:

    1. 在第一个循环中,您将迭代输入文件名。如果您打算保留input_list 要读取的输入文件列表,那么您还必须打开它们。现在,循环遍历输入文件名中的字符。

    2. 您正在循环打开输出文件。因此,只有最后一次写入操作才会成功。您必须将文件打开操作移到循环之外(参考:上面的代码 sn-p)或将模式编辑为“附加”。这可以按如下方式完成:

      write_new_file = open('output_word.txt', 'a')

    3. 您使用print 命令的方式存在语法错误。

    【讨论】:

    • 这对于刚刚学习还没有掌握print语句的初学者来说帮助不大。只给他编译没有解释的代码是没有建设性的。
    【解决方案3】:
    f=open('yourfilename','r').read()
    f1=f.split('\n')
    p=open('outputfilename','w')
    for i in range (len(f1)):
        p.write(str(f1[i])+'\n')
    p.close()
    

    希望这会有所帮助。

    【讨论】:

    • 虽然这似乎解决了 OP 的问题,但简要解释一下为什么会很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2013-07-14
    • 2021-05-10
    • 2012-09-20
    相关资源
    最近更新 更多