Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的文件访问_Python - Fatal编程技术网

python中的文件访问

python中的文件访问,python,Python,每当我为我的程序加载文本文件时,它都会在文本文件中显示信息,但当我输入花名册功能时,它不会显示文本文件,并显示可修改的文本文件。这与我最初创建文本文件的方式有关,还是我为loadData编写的代码写得不正确?我想我可能会对只是设置一个函数来读回文件而不是实际打开文本文件来修改文件之间的区别感到困惑 dict_member = {} players = dict_member class Players: def __init__(self, name, number, jersey):

每当我为我的程序加载文本文件时,它都会在文本文件中显示信息,但当我输入花名册功能时,它不会显示文本文件,并显示可修改的文本文件。这与我最初创建文本文件的方式有关,还是我为
loadData
编写的代码写得不正确?我想我可能会对只是设置一个函数来读回文件而不是实际打开文本文件来修改文件之间的区别感到困惑

dict_member = {}
players = dict_member
class Players:
    def __init__(self, name, number, jersey):
        self.name = name
        self.number = number
        self.jersey = jersey
    def display(self):
        print('Printing current members\n')
        for number, player in dict_member.items():
            print(player.name + ', ' + player.number + ', ' + player.jersey)
    def add(self):
        nam = input("Enter Player Name\n ")
        numb = input("Enter Player Number\n ")
        jers = input("Enter Jersey Number\n ")
        dict_member[nam] = Players(nam, numb, jers)
    def remove(self, name):
        if name in dict_member:
            del dict_member[name]
    def edit(self, name):
        if name in dict_member:
            nam = input("Enter Different Name\n")
            num = input("Enter New Number\n ")
            jers = input("Enter New Jersey Number\n ")
            del dict_member[name]
            dict_member[name] = Players(nam, num, jers)
        else:
            print("No such player exists")

    def saveData(self):
        roster = input("Filename to save: ")
        print("Saving data...")
        with open(roster, "r+") as rstr:
            for number, player in dict_member.items():
                rstr.write(player.name + ', ' + player.number + ', ' + player.jersey)
            print("Data saved.")
            rstr.close()

    def loadData(self):
        dict_member = {}
        roster = input("Filename to load: ")
        file = open(roster, "r")
        while True:
            inLine = file.readline()
            if not inLine:
                'break'
            inLine = inLine[:-1]
            name, number, jersey = inLine.split(",")
            dict_member[name] = (name, number, jersey)
        print("Data Loaded Successfully.")
        file.close()
        return dict_member

def display_menu():
    print("")
    print("1. Roster ")
    print("2. Add")
    print("3. Remove ")
    print("4. Edit ")
    print("5. Save")
    print("6. Load")
    print("9. Exit ")
    print("")
    return int(input("Selection> "))
print("Welcome to the Team Manager")
player_instance = Players(None, None, None)
menu_item = display_menu()
while menu_item != 9:
    if menu_item == 1:
        player_instance.display()
    elif menu_item == 2:
        player_instance.add()
    elif menu_item == 3:
        m = input("Enter Player to Remove\n")
        player_instance.remove(m)
    elif menu_item == 4:
        m = input("Enter Player to Edit\n")
        player_instance.edit(m)
    elif menu_item == 5:
        player_instance.saveData()
    elif menu_item == 6:
        player_instance.loadData()
    menu_item = display_menu()
print("Exiting Program...")

在显示花名册之前,您没有将数据加载到dict_member

当您在loadData函数中加载数据时,您将重新定义dict_成员 因此,它将“阴影”外部
dict_成员
,因此当调用
display
函数时,
dict_成员
将始终为空

所以你可能想删除这条线

def loadData(self):
    #  **remove this line --->** dict_member = {}
    roster = input("Filename to load: ")
    file = open(roster, "r")
    while True:
        inLine = file.readline()
        if not inLine:
            break
        inLine = inLine[:-1]
        name, number, jersey = inLine.split(",")
        dict_member[name] = (name, number, jersey)
    print("Data Loaded Successfully.")
    file.close()
    return dict_member
试试这个:

def loadData(self):
        file = open(input("Filename to load: "), "r")
        text = file.read()
        file.close()
        for line in text:
            name, number, jersey = (line.rstrip()).split(',')
            dict_member[name] = (name, number, jersey)
        print("Data Loaded Successfully.")
        return dict_member

def saveData(self, dict_member):
        file = open(input("Filename to save: "), "a")
        for number, player in dict_member.items():
            rstr.write(player.name + ', ' + player.number + ', ' + player.jersey)
        print("Data saved.")
        file.close()

我认为错误在于您使用了字符串形式的
“break”
,而不是命令
break
(不需要引号)。我对代码进行了一点优化,这样也许现在就可以了?如果没有,具体会发生什么?尝试调试并检查您的文件。

回溯(最近一次调用最后一次):文件“C:/Users/Family/PycharmProjects/Week5/Team Management 2.py”,第77行,在player_instance.loadData()文件“C:/Users/Family/PycharmProjects/Week5/Team Management 2.py”,第44行,在loadData name,number,jersey=(line.rstrip())中。拆分(,)ValueError:没有足够的值来解包(预期为3,得到1)
您的文件中似乎包含一行没有两个
。也许是空行?还要注意,在文本文件中执行“inLine=inLine[:-1]
时,您正在删除行中的最后一个字符?我尝试更改文本文件内的格式,但在进行建议的编辑后,文本文件仍无法加载到程序OK。我现在面临的问题是
ValueError:I/O操作关闭的文件。
如果我的理解正确
file=open(花名册,“r”)怎么可能
loadData
回溯(最近一次调用)中打开文件:文件“C:/Users/Family/PycharmProjects/Week5/Team Management 2.py”,第77行,在player_instance.loadData()文件“C:/Users/Family/PycharmProjects/Week5/Team Management 2.py”,第44行,在loadData name,number,jersey=(line.rstrip()).split(','))ValueError:没有足够的值来解包(预期为3,得到1)@JasonRay,检查您的文件?它是什么样子的?文本文件以这种方式保存它,如果这就是你要找的Joe,1234567890,12Jack,9876543210,13你不应该对你的代码进行实质性的编辑,并且改变你的要求。它使与原始代码相关的所有答案无效,使整个问答组难以理解或不可能理解。我可以在修订历史中看到原始问题。不同的错误意味着人们将尝试解决不同的问题。所以你会得到一些与当前问题无关的答案。这不是本网站的工作方式。我的道歉@BryanOakley只是在努力学习python。