Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 3.x 从保存的txt文件在prettytable中添加新行时出现问题_Python 3.x - Fatal编程技术网

Python 3.x 从保存的txt文件在prettytable中添加新行时出现问题

Python 3.x 从保存的txt文件在prettytable中添加新行时出现问题,python-3.x,Python 3.x,一般来说,我对python和编程都是新手,如果我没有正确解释或使用正确的术语,请原谅我。同样,如果你给我一个非常技术性的回答,我可能不会理解你。我正在尽我最大的努力,但这对我来说是新的,而且非常困难 我正在尝试学习python,因此我开始创建一个小程序,跟踪与徒步旅行相关的各种事情,如过去的徒步旅行、里程等。我发现了一个名为prettytable的库,我安装并导入了该库,将输入的数据格式化到表中。我在输入数据时使用了它,但不是从保存的文件中获得的。我希望能够保存输入程序的数据,以供以后使用 这是

一般来说,我对python和编程都是新手,如果我没有正确解释或使用正确的术语,请原谅我。同样,如果你给我一个非常技术性的回答,我可能不会理解你。我正在尽我最大的努力,但这对我来说是新的,而且非常困难

我正在尝试学习python,因此我开始创建一个小程序,跟踪与徒步旅行相关的各种事情,如过去的徒步旅行、里程等。我发现了一个名为prettytable的库,我安装并导入了该库,将输入的数据格式化到表中。我在输入数据时使用了它,但不是从保存的文件中获得的。我希望能够保存输入程序的数据,以供以后使用

这是我正在使用的模块,它创建了一个远足列表。每次远足都有目的地、远足里程、远足天数和合作伙伴。程序的这一部分按预期工作。输入信息后,输入的数据存储为一个名为“存储的单词”的列表,然后该列表作为一行添加到prettytable中。这张表是打印出来的 你已经完成了徒步旅行

def Hikes():

    import prettytable
    import csv

    answer = "yes"
    Index = 0


    mytable = prettytable.PrettyTable()

    x = prettytable.PrettyTable(["Destination", "Miles Hiked", "Days Hiked", "Partner"])
    x.align["Destination"] = "l" # Left align destination
    x.padding_width = 1 # One space between column edges and contents (default)

    while answer == "yes":
        words = ["destination", "miles hiked", "days hiked", "partner"]
        stored_words = []
        HikeList = []
        hikesave = open("hikes.txt" , "a")
        for word in words:
            answer = input("Enter the %s:" % word)
            stored_words.append(answer)
            print(stored_words)

        HikeList.append(stored_words)
        hikesave.write('\n')
        hikesave.write(str(stored_words))

        x.add_row(stored_words)

        hikesave.close()

        answer = input("Enter another hike? yes or no: ")


    print(x)

    return x
以下是我创建的用于加载文件的模块:

def LoadFile():

    import prettytable
    Flag = False
    FileToLoad = str



    mytable = prettytable.PrettyTable()

    x = prettytable.PrettyTable(["Destination", "Miles Hiked", "Days Hiked", "Partner"])
    x.align["Destination"] = "l" # Left align destination
    x.padding_width = 1 # One space between column edges and contents (default)

    print("-----------------------------------")
    print("     A = Hikes")
    print("     B = Miles List")
    print("     B = Destinations List")
    print("-----------------------------------")
    print()

    FileToLoad = input("Which file would you like to open?")

    while Flag == False: #Loop will keep running until true
        while FileToLoad == "A" or FileToLoad == "B" or FileToLoad == "C":
            if FileToLoad == "A

                with open("hikes.txt", "r") as f:   
                    lines = f.readline()
                    print(lines)                    

                x.add_row(lines)

##                f = open("hikes.txt", "r")
##                for line in f:
##                    print(line)
##                    x.add_row(line)


                print(x)

                Flag = True
我只是不知道如何在LoadFile模块中加载hikes.txt文件,并将该文件中的数据逐行添加到prettytable中。当我尝试这样做时,我的输出中会出现以下错误:

-----------------------------------
     A = Hikes
     B = Miles List
     C = Destinations List
-----------------------------------

Which file would you like to open?A
['High Country Pathway, MI', '82', '4', 'solo']

Traceback (most recent call last):
  File "D:\Program Files\PROGRAMMING\Python\11-3-13.py", line 260, in <module>
    main()
  File "D:\Program Files\PROGRAMMING\Python\11-3-13.py", line 66, in main
    c = LoadFile()
  File "D:\Program Files\PROGRAMMING\Python\11-3-13.py", line 216, in LoadFile
    x.add_row(lines)
  File "D:\Program Files\PROGRAMMING\Python\lib\site-packages\prettytable.py", line 818, in add_row
    raise Exception("Row has incorrect number of values, (actual) %d!=%d (expected)" %(len(row),len(self._field_names)))
**Exception: Row has incorrect number of values, (actual) 48!=4 (expected)**
应添加到prettytable中的行中。。。与上一模块中使用的格式相同

任何帮助都将不胜感激。我找不到关于我收到的错误消息的任何信息,并且一直在阅读文件输入/输出,但无法找出这一点。我知道我的代码可能有很多错误,但请记住,我对python非常陌生,只是想让它正常工作,所以请不要对我太苛刻

**编辑

Stevha,我尝试了你提供的代码,但我仍然得到相同的错误,除了现在是7=4:

回溯最近一次呼叫上次: 文件D:\Program Files\PROGRAMMING\Python\11-3-13.py,第265行,在 主要的 文件D:\Program Files\PROGRAMMING\Python\11-3-13.py,第66行,在main中 c=加载文件 文件D:\Program Files\PROGRAMMING\Python\11-3-13.py,第219行,在LoadFile中 x、 添加_行 文件D:\Program Files\PROGRAMMING\Python\lib\site packages\prettytable.py,第818行,在add\u行中 raise ExceptionRow的值数不正确,实际值为%d!=%d应为%lenrow,lenself.\u字段\u名称 异常:行的值数不正确,实际为7=4预期

我之前看过pickle和JSON,但并不真正理解我需要做什么。不过我觉得这个文本文件可以用。它可以用于打印信息,这没有问题,但到目前为止还不能插入到prettytable中。我也在研究csv导入,但试图让它首先与文本文件一起工作

谢谢你的其他建议。我本来打算稍后再看一遍代码,当我开始工作并进行输入验证之类的工作时,但现在我只是随便看看,试着让事情开始工作。我正在探索python可以做什么,不能做什么,试着看看它是如何工作的。我知道里面有一些未使用的代码,比如HikeList。我这样做是为了尝试在文本文件中以不同的方式保存数据,希望能够克服这个错误

当我输入保存到hikes.txt文件中的数据时,我的程序是这样的:

    Choose from the list below: 

     A = Enter Miles Hiked
     B = Enter hiking destination
     C = Load File                        
     E = Exit program
--------------------------------------------------

Enter your selection:  b
Enter the destination:Big Bend, TX
['Big Bend, TX']
Enter the miles hiked:45
['Big Bend, TX', '45']
Enter the days hiked:5
['Big Bend, TX', '45', '5']
Enter the partner:Dan
['Big Bend, TX', '45', '5', 'Dan']
Enter another hike? yes or no: no
+--------------+-------------+------------+---------+
| Destination  | Miles Hiked | Days Hiked | Partner |
+--------------+-------------+------------+---------+
| Big Bend, TX |      45     |     5      |   Dan   |
+--------------+-------------+------------+---------+
打印语句暂时存在,以便我可以看到文本文件中输入的内容。将新的hikes添加到hikes.txt文件后,如下所示:

['High Country Pathway, MI', '82', '4', 'solo']
['Wemincuhe Wilderness, CO', '55', '6', 'Lisa']
['Big Bend, TX', '45', '5', 'Dan']
choice = input("Which file would you like to open?")
choice = choice.strip() # remove leading and trailing white space
choice = choice.lower() # convert to lower-case

文本文件中的每一行都包含列表格式的prettytable中所有4列的值。错误告诉我没有4个值,但不是我有一个列表,每个列表中包含4个值吗?如果它认为它是一个字符串而不是一个列表,那么我如何告诉python我的hikes.txt文件中的每一行都是一个列表?

我想您需要一些类似的代码:

with open("hikes.txt", "r") as f:   
    for line in f:
        row = line.split()
        x.add_row(row)
您可以获取打开的文件对象f并将其用于for循环。执行此操作时,此示例行中的循环变量将设置为文件和循环体运行的一行

顺便说一下,当您提示用户输入时,您可能希望执行以下操作:

['High Country Pathway, MI', '82', '4', 'solo']
['Wemincuhe Wilderness, CO', '55', '6', 'Lisa']
['Big Bend, TX', '45', '5', 'Dan']
choice = input("Which file would you like to open?")
choice = choice.strip() # remove leading and trailing white space
choice = choice.lower() # convert to lower-case
然后你可以将选择与“a”和“b”等进行比较,这样会有点宽容,用户不需要使用大写字母,如果用户错误地点击空格键,它仍然可以工作

您可以在一行中完成以上所有操作:

choice = input("Which file would you like to open?").strip().lower()
编辑:我不太理解你保存远足数据的代码。看起来你正在一次编写所有的徒步旅行数据,我认为你这样做是行不通的

我建议您要么编写一个非常简单的格式,一次一行,要么将所有数据保存在列表中,然后使用库函数编写列表。最好的选择是Python的本机pickle或使用JSON模块的JSON e

假设您想编写一个简单的格式,CSV将是一个不错的选择。如果你在谷歌上搜索PythonCSV教程,你会发现很多帮助,StackOverflow上也有很多关于它的东西

编辑:另外,很明显,您对Python非常陌生。我鼓励您通过Python简介来学习Python,比如艰苦地学习Python,或者阅读一本好的Python书籍

这不是100%必需的,但是学习Python社区的习惯用法并遵循它们是一个非常好的主意。例如,变量名应该使用小写字母和下划线;应为类名保留首字母大写。这是写在一个标准,称为政治公众人物8。如果您查看StackOverflow语法如何突出显示您的代码,您将看到HikeList的显示方式与其他变量不同;这是因为它被标记为类名,因为它以大写字母开头

另外,我的建议是把你的程序分成小块,然后测试每一块。您是否测试过您的文件创建代码是否符合您的要求?您是否查看了完成后得到的输出文件hikes.txt


此外,下面是错误消息的含义。您创建了一个PrettyTable类实例,并将其设置为4列表。因此,它希望每个输入行都是一个列表,列表中有4项。但是你传递了一个字符串。Python会假装字符串是一个字符列表,因此您的PrettyTable实例看到了一个包含48项内容的列表,每项内容都是一个字符。我的代码示例使用.split method函数在空白处拆分字符串,但您可以将CSV与其他分隔符一起使用,这样可能会更好。

谢谢您的回复。我尝试了你提供的代码,我仍然得到相同的错误,但7=4相反: