【问题标题】:Writing functions to allow user define file name and enter file contents编写函数以允许用户定义文件名并输入文件内容
【发布时间】:2018-01-22 23:09:34
【问题描述】:

我作为初学者正在学习 Python,并且有一个我无法弄清楚的问题。我需要编写函数以允许用户设置/给文件命名,然后输入内容。

我得到的错误信息是:"Str' object is not callable。我不知道如何解决这个问题。请你帮帮我。非常感谢!

代码如下:

==========================================

WRITE = "w"
APPEND = "a"

fName = ""
def fileName():  #to define name of the file.
    fName = input("Please enter a name for your file: ")
    fileName = open(fName, WRITE)
    return fileName

#now to define a function for data entry
dataEntry = ""
def enterData():
    dataEntry = input("Please enter guest name and age, separated by a coma: ")
    dataFile = open(fName, APPEND(dataEntry))
    fName.append(dataEntry)
    return dataFile 

#to determine if it's the end of data entry
moreEntry = input("Anymore guest: Y/N  ")
while moreEntry != "N":
    enterData()    #here to call function to repeat data entry

fName.close()



fileName()
enterData()
print("Your file has been completed!")

fileContents = fName.readline()
print(fileContents)

【问题讨论】:

  • 使用跟踪显示确切的错误。您正试图在某处将字符串视为函数。
  • fileName = open(fName, WRITE) 正在用字符串覆盖您的函数名称;您将变量和函数命名为同一件事。我不会认为这会持续到全球范围内,但它似乎是。我会写一个答案,但在 Python 范围界定方面我显然生疏了,所以我无法给出很好的解释。
  • 请发布完整的 Traceback。你应该得到其他错误。这是您遇到问题的确切代码吗?

标签: python function file for-loop writing


【解决方案1】:

我运行了代码,然后...我看到第 14 行的错误

 14     dataFile = open(fName, APPEND(dataEntry))
  • APPEND 似乎是一个字符串。它似乎不是一个函数。
  • fName 未在此范围内声明。您的功能间距已关闭。也许您打算按顺序而不是部分运行所有代码?
    事实上,fName 被全局声明和定义一次(第 4 行),在函数 filename() 中声明和定义(第 6 行)。 函数中也引用了 fName(第 7 行)第 14 行调用失败

     dataFile = open(fName, APPEND(dataEntry)) # fName has not been declared in function enterData()
    

我怀疑如果您对行重新排序而不使用函数(由于引用),您的代码会起作用。另外,请关闭您的文件。 EG

f = open ("somefile.txt", "a+")
...
f.close() #all in the same block.

【讨论】:

    【解决方案2】:

    感谢所有输入。非常感激。我对代码进行了一些修改,首先将所有数据条目放入列表中,然后尝试将列表附加到文件中。它在一定程度上有效(大约 80%,也许!)

    但是,我现在遇到了另一个问题。当我试图打开文件以附加列表时,它在代码(第 31 行)旁边显示“没有这样的文件或目录”:“myFile = open(fName, APPEND)”。但是我以为我先声明然后让用户在开头定义名称?请问我应该如何使它工作?

    再次提前致谢!

    WRITE = "w"
    APPEND = "a"
    
    fName = ""
    def fileName():  #to define name of the file.
        fName = input("Please enter a name for your file: ")
        fileName = open(fName, WRITE)
        fileName.close()
        return fileName
    
    
    #now to define a function for data entry
    dataEntry = ""
    dataList = []
    def enterData():
        dataEntry = input("Please enter guest name and age, separated by a coma: ")
        dataList.append(dataEntry)
        return 
    
    fileName()
    enterData()
    
    #to determine if it's the end of data entry
    moreEntry = input("Anymore guest: Y/N  ")
    if moreEntry == "Y":
        enterData()
    else:
        print("Your file has been completed successfully!")
    
    
    myFile = open(fName, APPEND)    
    myFile.append(dataList)  
    myFile.close()
    
    
    fileContents = fName.readline()
    print(fileContents)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2017-05-07
      相关资源
      最近更新 更多