【问题标题】:Open() and read() methods in Python not adding to list [duplicate]Python中的Open()和read()方法未添加到列表中[重复]
【发布时间】:2017-08-23 20:55:48
【问题描述】:

首先我将发布我的代码。我觉得有一个简单的答案,我不知何故忽略了。

questionsList=[]
answersList=[]
def retrieveQuestions():
    f=open('Questions.txt')
    questionsList=f.read().splitlines()
    for row in f:
        questionsList.append(row)

def retrieveAnswers():
    with open('Answers.txt') as j:
        answersList=list(j.read().splitlines())

retrieveQuestions()
retrieveAnswers()
print(questionsList)
print(answersList)

当我运行程序时,我得到了输出 [] [] 查了多种文件路径方法,多种读取方法和.splitlines(),还是不知道哪里出了问题。

【问题讨论】:

标签: python list file


【解决方案1】:

目前,您的方法仅创建和填充列表,没有其他内容 - 没有屏幕输出或返回。只需将return 添加到您的函数并将值分配给变量并在每个调用的函数中打印或print。并且您不需要在顶部分配全局变量,因为您在方法中定义变量。

返回和赋值

def retrieveQuestions():
    f=open('1222_2016_2016-2017.csv')
    questionsList=f.read().splitlines()
    for row in f:
        questionsList.append(row)
    f.close()

    return questionsList

def retrieveAnswers():
    with open('ODDFiles.csv') as j:
        answersList=list(j.read().splitlines())

    return answersList

questionsList = retrieveQuestions()
answersList = retrieveAnswers()

print(questionsList)
print(answersList)

内部打印

def retrieveQuestions():
    f=open('1222_2016_2016-2017.csv')
    questionsList=f.read().splitlines()
    for row in f:
        questionsList.append(row)
    print(questionsList)

def retrieveAnswers():
    with open('ODDFiles.csv') as j:
        answersList=list(j.read().splitlines())
    print(answersList)

retrieveQuestions()
retrieveAnswers()

【讨论】:

  • 这行得通。虽然为什么我必须提出 questionsList=retrieveQuestions() ? retrieveQuestions 方法本身不应该将输入分配给 questionsList 吗?这就是它在函数内部所做的正确吗?
  • 阅读面向对象编程。不仅是 Python,在大多数语言中,函数内部的任何内容都是该函数的本地内容,除非您返回值,否则不存在于外部。
  • 但是,我在函数内部使用了全局列表。为什么这不起作用?
  • 如前所述,您在函数内部重新分配,因此不需要全局变量,而且您也没有提到任何return。您可能需要使用global。见here
【解决方案2】:

试试看:

questionsList=[]
answersList=[]
def retrieveQuestions():
    f=open('Questions.txt', 'r')
    questionsList = f.readlines().splitlines()

def retrieveAnswers():
    with open('Answers.txt', 'r') as j:
        answersList = j.readlines().splitlines()

retrieveQuestions()
retrieveAnswers()
print(questionsList)
print(answersList)

建议:

def read_file(filename):
    return open(filename, 'r').readlines().splitlines()

questionsList = read_file('Questions.txt')
answersList = read_file('Answers.txt')

print(questionsList)
print(answersList)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2012-11-06
    • 1970-01-01
    • 2022-01-19
    • 2018-11-07
    • 2023-04-04
    相关资源
    最近更新 更多