【问题标题】:Trouble Getting a Function Result Written to External .txt Using Python使用 Python 将函数结果写入外部 .txt 时遇到问题
【发布时间】:2012-03-16 14:39:04
【问题描述】:

为了澄清,我对 Python 和一般编程还是新手,所以请原谅我的无知。

我要做的是获取单词列表,让用户输入自己的关键字并将两者结合起来,然后将它们打印到 .txt 文件中。我在下面拼凑了这段代码,它在一定程度上实现了这一点。我的问题是只有第一个关键字 ('kw: ') + 用户输入的关键字被写入 key_word.txt 文件。我通过在我的函数中使用“return”得到这个结果。如果我在函数“none”中使用“print”,则会将其写入 key_word.txt 文件。

如何获取我的整个关键字列表 ('search_kw = ') + 用户输入的要写入 .txt 文件的关键字。

search_kw = ('kw: ', 'kw1: ', 'kw3 ', 'kw4: ', 'kw5: ', 'kw6: ', 'kw7: ', 'kw8: ')

keyword = raw_input('Enter your keyword here\n > ')

def add_keyword():
    for word in search_kw:
        return word + keyword

text_file = open("/Users/home/Projects/keyword_file.txt", "w")
text_file.write("%s" % search_kw)
text_file.close()

add_keyword()

【问题讨论】:

标签: python iterator return


【解决方案1】:

有几个问题:

search_kw = ('kw: ', 'kw1: ', 'kw3 ', 'kw4: ', 'kw5: ', 'kw6: ', 'kw7: ', 'kw8: ')

keyword = raw_input('Enter your keyword here\n > ')

def add_keyword():
    for word in search_kw:
        # Leave the function, breaking the loop after the first iteration
        return word + keyword

text_file = open("/Users/home/Projects/keyword_file.txt", "w")
# Write search_kw before adding any keywords to it
text_file.write("%s" % search_kw)
text_file.close()

# Only calling add_keyword and the end, and not using the return value
add_keyword()

你可能想要的是更接近这个的东西:

def add_keyword():
    keywords = []
    for word in search_kw:
        keywords.append(word + keyword)
    return keywords

search_kw = add_keyword()
text_file = open("/Users/home/Projects/keyword_file.txt", "w")
text_file.write("%s" % search_kw)
text_file.close()

有很多更优雅的方法可以做到这一点(例如使用生成器表达式),但这至少应该让您的示例正常工作。

【讨论】:

  • 我仍然只能使用此代码建议将“None”写入keyword_file.txt。
  • 是的!非常感谢你。它不仅有效,而且我明白我做错了什么。
【解决方案2】:

这里的问题是您正在打开文件进行写入。这可能看起来令人困惑,但写入文件和附加到文件是两种不同的操作。

当您写入以写入模式'w' 打开的文件时,Python 从文件的开头开始写入,因此该文件中已经存在的任何内容都可能被覆盖。

当您写入以追加模式'a' 打开的文件时,Python 知道文件中还有您想要保留的其他内容,并在当前存在的内容之后写入文件。

尝试以附加模式打开文件:

text_file = open("/Users/home/Projects/keyword_file.txt", "a")

【讨论】:

    【解决方案3】:

    你写的是列表而不是字符串

    text_file.write("%s" % search_kw)

    试试 search_kw[x]

    【讨论】:

      【解决方案4】:

      您打开文件进行写入。写入会打开文件并从头开始(擦除所有内容)。追加从末尾开始。要以附加模式打开文件,请使用:

      f = open('/path/to/file', 'a')

      要附加到文件,您仍然使用f.write() 函数。

      【讨论】:

      • 那么,我需要使用 'a' 来编写代码的全部内容,而不仅仅是开头?
      【解决方案5】:

      您的案例的正确数据结构似乎是字典。

      search_kw = {'kw': '', 'kw1': '', 'kw3': '', 'kw4': '', 'kw5': '', 'kw6': '', 'kw7': '', 'kw8': ''}
      
      keyword = raw_input('Enter your keyword here\n > ')
      
      
      
      def add_keyword():
          text_file = open("keyword_file.txt", "w")
          for key,_ in search_kw.items(): # iterate over (key,value) pairs in the dictionary
              search_kw[key] = keyword    # associate new value with each key
              text_file.write("%s: %s\n" % (key, search_kw[key])) # write (key,value) pairs to a file
          text_file.close()
      
      add_keyword()
      

      【讨论】:

      • 同意...字典可能是更好的数据结构。您可以将键和值很好地保持在一起,然后对它们做任何您想做的事情。
      • 写入keyword_file.txt的所有内容都是“无”。怎么了?
      • 对我来说很好。请注意,search_kw 与原始 search_kw 的形式不同。
      【解决方案6】:

      在您执行任何捕获用户输入的工作之前,您似乎正在打开和关闭正在写入的文件。

      你需要 1)打开文件进行写入 2)将您想要的所有用户信息放入其中 3) 然后关闭文件

      Python 的 with 运算符会为您处理文件的打开/关闭,如下所示:

      search_kw = ('kw: ', 'kw1: ', 'kw3 ', 'kw4: ', 'kw5: ', 'kw6: ', 'kw7: ', 'kw8: ')
      
      with open('keywordfile.txt','w') as text_file:
          for word in search_kw:
              keyword = raw_input('Enter your keyword here\n > ')
              text_file.write("s\n" % word + keyword)
      

      【讨论】:

      • 我尝试了这个代码建议但遇到了这个错误Enter your keyword here > ball Traceback (most recent call last): File "Untitled 6.py", line 6, in <module> text_file.write("s\n" % word + keyword) TypeError: not all arguments converted during string formatting/
      猜你喜欢
      • 2019-02-20
      • 2022-01-22
      • 2021-11-27
      • 2018-01-06
      • 2013-12-14
      • 2020-08-06
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多